@esri/solutions-components 1.1.0-next.20250917.1 → 1.1.0-next.20250917.3
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.
- package/dist/cdn/{WLSSLUAO.js → 23DGJL3U.js} +2 -2
- package/dist/cdn/{JK77IEXN.js → 25K6LQG4.js} +2 -2
- package/dist/cdn/{OGCCPNWE.js → 25Q55WEG.js} +2 -2
- package/dist/cdn/{MS4KAGNH.js → 26V5UISV.js} +2 -2
- package/dist/cdn/{FG24QZWE.js → 276AX3RG.js} +2 -2
- package/dist/cdn/{7RZYECSQ.js → 2CNJMPJK.js} +2 -2
- package/dist/cdn/{LWGB5XJM.js → 2ERC5CBX.js} +2 -2
- package/dist/cdn/{5WTH4MKL.js → 2G6GWUOD.js} +2 -2
- package/dist/cdn/{Q5GYBZ6S.js → 2JGEEROK.js} +2 -2
- package/dist/cdn/2KG5VK2O.js +4 -0
- package/dist/cdn/{3DWQM643.js → 2TXEPHOF.js} +2 -2
- package/dist/cdn/{KKFYYIMR.js → 2UBCTQ2F.js} +2 -2
- package/dist/cdn/{LHZ3XERP.js → 2VKKSJTP.js} +2 -2
- package/dist/cdn/{KSDERO45.js → 2Y43VYYN.js} +2 -2
- package/dist/cdn/{DUPUWAGJ.js → 33SECSBZ.js} +2 -2
- package/dist/cdn/{RSTLLF3I.js → 33ZNVZBY.js} +2 -2
- package/dist/cdn/{UX2L75ED.js → 34XR5PYL.js} +2 -2
- package/dist/cdn/{VZU32GLR.js → 374C7SUE.js} +2 -2
- package/dist/cdn/{FSOOQC6X.js → 3BDHCEQC.js} +2 -2
- package/dist/cdn/{PAH2YDTS.js → 3BSDLNLF.js} +2 -2
- package/dist/cdn/{RIIZ7QQZ.js → 3CTSXXQW.js} +2 -2
- package/dist/cdn/{UK2A3ONQ.js → 3D5IUXVV.js} +2 -2
- package/dist/cdn/{J5LUGGEM.js → 3I3P6GGL.js} +1 -1
- package/dist/cdn/{F4JVAFDH.js → 3I4UTEAM.js} +2 -2
- package/dist/cdn/{QOFZ275H.js → 3IWOKJQW.js} +2 -2
- package/dist/cdn/{MLTILQN4.js → 3LKW6XA4.js} +2 -2
- package/dist/cdn/{G5FMCRUO.js → 3MNA2DCZ.js} +2 -2
- package/dist/cdn/{4B26SMKT.js → 3MWM7WHC.js} +2 -2
- package/dist/cdn/{RM6OJ6CC.js → 3PHDHRXO.js} +2 -2
- package/dist/cdn/{L4JMVIN2.js → 3Q5BUTDT.js} +2 -2
- package/dist/cdn/{Z7IEGCD6.js → 3RQUB6W3.js} +2 -2
- package/dist/cdn/{J46JZ3HC.js → 3SQX67AO.js} +2 -2
- package/dist/cdn/{PU5PZCL4.js → 3VF44LQK.js} +2 -2
- package/dist/cdn/{BZLBIIMX.js → 3W34PSVJ.js} +2 -2
- package/dist/cdn/{E2OUIXA6.js → 4AVSFGC7.js} +2 -2
- package/dist/cdn/{RPXT2OKO.js → 4C6KDRT5.js} +2 -2
- package/dist/cdn/{KS6K3G5I.js → 4DYHHC23.js} +2 -2
- package/dist/cdn/{CWBGX5QX.js → 4FOINDFV.js} +2 -2
- package/dist/cdn/{YVQHAXE6.js → 4H6HGRMB.js} +2 -2
- package/dist/cdn/{VA4HF6BT.js → 4HDVSYVJ.js} +2 -2
- package/dist/cdn/{MDWAUWKR.js → 4IGVGOLH.js} +2 -2
- package/dist/cdn/{2BHPIU3V.js → 4L7TLI7H.js} +2 -2
- package/dist/cdn/{7LI47G6Q.js → 4OA2H2BW.js} +2 -2
- package/dist/cdn/{LJH64QDF.js → 4WZ6FMVC.js} +2 -2
- package/dist/cdn/{5NQ7V4XP.js → 4YSF64DY.js} +2 -2
- package/dist/cdn/{PD62JJHH.js → 53DGGUYK.js} +2 -2
- package/dist/cdn/{4QTP52XH.js → 57PFQG3Q.js} +1 -1
- package/dist/cdn/{YQTNI3UI.js → 5APDUABB.js} +2 -2
- package/dist/cdn/{H2G4MMVN.js → 5DKHEQEC.js} +2 -2
- package/dist/cdn/{C434YNG2.js → 5FXUTKPE.js} +1 -1
- package/dist/cdn/{ZOCHMKIS.js → 5NGJWYXD.js} +1 -1
- package/dist/cdn/{HZ655FWN.js → 5O2LIZF6.js} +2 -2
- package/dist/cdn/{X7BVJ3FT.js → 5O3U2BCX.js} +2 -2
- package/dist/cdn/{NJIUK7EX.js → 5PHMGK3A.js} +2 -2
- package/dist/cdn/{74NSWBXK.js → 67DCQZSH.js} +2 -2
- package/dist/cdn/{ZIGUL6LU.js → 67IDWQNM.js} +2 -2
- package/dist/cdn/{XKSN7OZN.js → 6BKV2R64.js} +2 -2
- package/dist/cdn/{Z7HUXWT7.js → 6BRMIXSZ.js} +2 -2
- package/dist/cdn/{JHDFGAEX.js → 6CFYWDS6.js} +2 -2
- package/dist/cdn/{S64JEF4E.js → 6DJDRU2V.js} +1 -1
- package/dist/cdn/{FSHGBGA7.js → 6DKKIFLL.js} +2 -2
- package/dist/cdn/{QUOUTJQ3.js → 6E64TWI2.js} +2 -2
- package/dist/cdn/{L4YIXDS2.js → 6FHZXXJY.js} +2 -2
- package/dist/cdn/{PVWKBRMD.js → 6OJTSCUE.js} +2 -2
- package/dist/cdn/{2LPFG2CT.js → 6P6JRXAN.js} +2 -2
- package/dist/cdn/{2I2YENHT.js → 6VLEQZO4.js} +2 -2
- package/dist/cdn/{PKB6JNV7.js → 6VVPQSKS.js} +2 -2
- package/dist/cdn/{JB65YU3U.js → 6XFZTLVG.js} +1 -1
- package/dist/cdn/{HO6FTZFW.js → 6Y4QB252.js} +2 -2
- package/dist/cdn/{GTPJDWLZ.js → 72J5TD5O.js} +2 -2
- package/dist/cdn/{A7TK3HI4.js → 74DIIS7X.js} +2 -2
- package/dist/cdn/{DX6YFVFJ.js → 7B755BM4.js} +2 -2
- package/dist/cdn/{GTAD2V3J.js → 7C2FRIKG.js} +2 -2
- package/dist/cdn/{CI2DTN6B.js → 7GXQSPGU.js} +2 -2
- package/dist/cdn/{EWVUFFYM.js → 7HLYL4Z5.js} +2 -2
- package/dist/cdn/7KAVXYKZ.js +4 -0
- package/dist/cdn/{AETEXDRE.js → 7N6WTOTY.js} +2 -2
- package/dist/cdn/{U42WTSOS.js → 7SCTQDJP.js} +2 -2
- package/dist/cdn/{MXLDJIIW.js → 7TFQRMTL.js} +2 -2
- package/dist/cdn/{2SHTW2ZI.js → 7THS7KQB.js} +2 -2
- package/dist/cdn/{7BTE7YBI.js → 7VP7DCOV.js} +2 -2
- package/dist/cdn/{FR7FDRQG.js → A5R7BOE7.js} +2 -2
- package/dist/cdn/{NN3GLANP.js → A64JRNBC.js} +2 -2
- package/dist/cdn/{5TISSUZK.js → A7MKEIPS.js} +1 -1
- package/dist/cdn/{HDHARZ7G.js → ACA4LFCG.js} +2 -2
- package/dist/cdn/{POH5W7N2.js → ADIC5PNP.js} +2 -2
- package/dist/cdn/{QTWUBF6E.js → AFJV6PIB.js} +2 -2
- package/dist/cdn/{RYYQGQBV.js → AFTYYGIG.js} +2 -2
- package/dist/cdn/{T6G5VVOC.js → AFVOPDC6.js} +2 -2
- package/dist/cdn/AI2D7I73.js +18 -0
- package/dist/cdn/{6R5GRVZ2.js → AUANQYB2.js} +2 -2
- package/dist/cdn/{N5R7QFQV.js → AWCFCVQT.js} +2 -2
- package/dist/cdn/{3RJOS4SB.js → AXC3NNWJ.js} +2 -2
- package/dist/cdn/{C6ZJEKKF.js → AXHFZQLS.js} +2 -2
- package/dist/cdn/{KF2ZU65S.js → AXSSRTY4.js} +2 -2
- package/dist/cdn/{J7RBVELL.js → AXVCFOW7.js} +2 -2
- package/dist/cdn/{7KOGLZ6A.js → B5COXEYQ.js} +2 -2
- package/dist/cdn/{6ZGYZNIG.js → BANEXHRU.js} +2 -2
- package/dist/cdn/{DZPVXGGI.js → BEKVBNGE.js} +2 -2
- package/dist/cdn/{KHZSF3FD.js → BJCSE6VB.js} +2 -2
- package/dist/cdn/{ZSRLOM3Q.js → BOGZGJQP.js} +1 -1
- package/dist/cdn/{MKZ36QS2.js → BQTBQVPE.js} +2 -2
- package/dist/cdn/{MSQ4QY3M.js → BS4PAYK2.js} +2 -2
- package/dist/cdn/{X5KH75KH.js → BTURURWV.js} +2 -2
- package/dist/cdn/{ZU6MGOIO.js → BVQRMGNW.js} +2 -2
- package/dist/cdn/{CLNHIIST.js → C45K72V3.js} +2 -2
- package/dist/cdn/{GNIUPKE6.js → C4PSTCU3.js} +2 -2
- package/dist/cdn/{UBFQBYB3.js → C6MF6XSF.js} +2 -2
- package/dist/cdn/{TP6Q7Q5F.js → C7BO73SX.js} +2 -2
- package/dist/cdn/{ZII5BUBB.js → CB7RWTDL.js} +2 -2
- package/dist/cdn/{RJJG2Z2Z.js → CJVYP2HV.js} +2 -2
- package/dist/cdn/{RGS23LVD.js → CLIULPKO.js} +2 -2
- package/dist/cdn/{SKXF2EYJ.js → CM7EZMOU.js} +2 -2
- package/dist/cdn/{WB6EVTKB.js → CMSI3WWQ.js} +2 -2
- package/dist/cdn/{AKYRMP2F.js → CMVXBESM.js} +1 -1
- package/dist/cdn/{O5OZCLSF.js → CSX72NE7.js} +2 -2
- package/dist/cdn/{65HGLJRC.js → CVF7IIIO.js} +2 -2
- package/dist/cdn/{NNC5D3XW.js → CVTYI2QI.js} +2 -2
- package/dist/cdn/{D2WEMOK5.js → CWOMQYWI.js} +2 -2
- package/dist/cdn/{2TCRQXKW.js → CZ4Y5ESH.js} +2 -2
- package/dist/cdn/{QWOKTIQO.js → D5P6IBF7.js} +2 -2
- package/dist/cdn/{Q6WUDFS6.js → D6UDTWDC.js} +2 -2
- package/dist/cdn/{Z4FRBC4G.js → DANM7XO7.js} +1 -1
- package/dist/cdn/{JV5TACGL.js → DF3SHA3I.js} +2 -2
- package/dist/cdn/{4YMGDWGC.js → DFEG36P2.js} +2 -2
- package/dist/cdn/{KW323Y7Z.js → DFZVHHC6.js} +2 -2
- package/dist/cdn/{OMJEC7PI.js → DMF3ZS6S.js} +1 -1
- package/dist/cdn/{EX3YIW6I.js → DQAFHNHQ.js} +2 -2
- package/dist/cdn/{VL4YBUCG.js → DYJBR5L2.js} +2 -2
- package/dist/cdn/{G7COFGFO.js → DYW2TQLF.js} +2 -2
- package/dist/cdn/{NYQRE3PP.js → E42YBQ7O.js} +2 -2
- package/dist/cdn/{4MF7IEUO.js → E6XUORCN.js} +2 -2
- package/dist/cdn/{MB6SBDLQ.js → EKEU4WYB.js} +2 -2
- package/dist/cdn/{P72YRSGB.js → EMW7AZJE.js} +2 -2
- package/dist/cdn/{HJ7JZJMY.js → EN2Q666I.js} +2 -2
- package/dist/cdn/{ZBI4IGN5.js → ENUTEHGK.js} +2 -2
- package/dist/cdn/{Z7BHSA4E.js → EQ5RJFK2.js} +2 -2
- package/dist/cdn/{YOELOUHA.js → EQDBU2DB.js} +2 -2
- package/dist/cdn/{GOWTEL4L.js → ERITQCPK.js} +1 -1
- package/dist/cdn/{EE6ZBEFP.js → EVULQW32.js} +2 -2
- package/dist/cdn/{C6FCTU5X.js → F2JTJZO5.js} +2 -2
- package/dist/cdn/{SAANCWI3.js → F2NIE5RW.js} +2 -2
- package/dist/cdn/{OAGFAKNI.js → FEGSIGRR.js} +2 -2
- package/dist/cdn/FF3NG56R.js +4 -0
- package/dist/cdn/{EBFEJ3UW.js → FH77EHC7.js} +2 -2
- package/dist/cdn/{5OQXQNJT.js → FMQYJPVT.js} +2 -2
- package/dist/cdn/FPABEWEL.js +4 -0
- package/dist/cdn/{RJ5O3HFW.js → FPIEQSPC.js} +2 -2
- package/dist/cdn/{UPCU2YNO.js → FWAJ6IQS.js} +2 -2
- package/dist/cdn/{6GRO6IWG.js → G2IO5XRI.js} +2 -2
- package/dist/cdn/{E3IGEKXX.js → G2SCRAL5.js} +2 -2
- package/dist/cdn/{V6KV2EKM.js → G3V5H3SY.js} +2 -2
- package/dist/cdn/{TFOR5IN2.js → G55CT3Q3.js} +2 -2
- package/dist/cdn/{LP2V3LHC.js → G6OJQFFT.js} +2 -2
- package/dist/cdn/{M3RQ6YB2.js → G7TZJ36S.js} +2 -2
- package/dist/cdn/{6RNO7D3E.js → GCV7OW3K.js} +2 -2
- package/dist/cdn/{6H4R6H26.js → GHB6GDWI.js} +2 -2
- package/dist/cdn/{MSNUWHZX.js → GI42A5PN.js} +2 -2
- package/dist/cdn/{LEAZKVUV.js → GJB5V5L5.js} +2 -2
- package/dist/cdn/{IGHDZ6NM.js → GPJPWPBF.js} +2 -2
- package/dist/cdn/GQE2GRUW.js +18 -0
- package/dist/cdn/{SEBUGPQK.js → GS5NJX7E.js} +3 -3
- package/dist/cdn/{Z6JQQJT2.js → GUP6ZO4F.js} +2 -2
- package/dist/cdn/{BSK2FSTE.js → GVZBGAAJ.js} +2 -2
- package/dist/cdn/{D7MXZOLT.js → GYGE2KYV.js} +2 -2
- package/dist/cdn/{2MEEZ5ZM.js → H2UV6JFG.js} +2 -2
- package/dist/cdn/{2RPEDXDL.js → H4RSU4MF.js} +2 -2
- package/dist/cdn/{NXUG2Y4D.js → H6APDFAM.js} +2 -2
- package/dist/cdn/{MEIAZRM6.js → HAAFH5XD.js} +1 -1
- package/dist/cdn/{DAMQCKMB.js → HCQJOXBZ.js} +2 -2
- package/dist/cdn/{EE6BRKTG.js → HDN2NFMQ.js} +2 -2
- package/dist/cdn/{BB7Q2E6F.js → HGYCVUOP.js} +2 -2
- package/dist/cdn/{XGDUNKJK.js → HHFGED3K.js} +2 -2
- package/dist/cdn/{Q7HZZP5B.js → HN25GUU5.js} +2 -2
- package/dist/cdn/{QVIZVET7.js → HTO7TBAF.js} +1 -1
- package/dist/cdn/{6M6B4G2D.js → HWRXPVXD.js} +2 -2
- package/dist/cdn/{FYY3S3Z5.js → HXFKN2H6.js} +2 -2
- package/dist/cdn/{7AWMALHG.js → I26QCQ5Y.js} +2 -2
- package/dist/cdn/{U4JBG65X.js → I5IJMWLC.js} +2 -2
- package/dist/cdn/{277XJSTT.js → IG5T7Z5R.js} +2 -2
- package/dist/cdn/{77ZJA5MA.js → IJIN4NBZ.js} +2 -2
- package/dist/cdn/{OAGQFGAF.js → IQQM5XKJ.js} +2 -2
- package/dist/cdn/{Q4KC5E7I.js → IUOP7OND.js} +2 -2
- package/dist/cdn/{ZN5AXSHK.js → IVIV7Y5Y.js} +2 -2
- package/dist/cdn/{33TP7LEP.js → IVRETE2J.js} +2 -2
- package/dist/cdn/{3XYB36Q3.js → J3XMKSZB.js} +1 -1
- package/dist/cdn/{P5QKOX7P.js → J5ACZLOA.js} +2 -2
- package/dist/cdn/{57LAOXA6.js → J6F2UAOG.js} +2 -2
- package/dist/cdn/{UJOAAHPG.js → JCYZD45T.js} +2 -2
- package/dist/cdn/{S2Y4WEKE.js → JD3TRKBI.js} +2 -2
- package/dist/cdn/{EFAUQO4F.js → JDOMJXG2.js} +2 -2
- package/dist/cdn/JEESK3GH.js +4 -0
- package/dist/cdn/{OHYLULSL.js → JMGZV2HZ.js} +2 -2
- package/dist/cdn/{5C5B4QKH.js → JOYGIH3I.js} +2 -2
- package/dist/cdn/{3EYWSHHH.js → JPJG3EHK.js} +2 -2
- package/dist/cdn/{OAONHDB7.js → JRILB3W2.js} +2 -2
- package/dist/cdn/{PJISEH5O.js → JURBQUK2.js} +1 -1
- package/dist/cdn/{3IDRBBTI.js → JY6IFP7X.js} +2 -2
- package/dist/cdn/{2SIN3G2L.js → JZFO56X2.js} +2 -2
- package/dist/cdn/{UOHDOMRU.js → JZMDPXI3.js} +2 -2
- package/dist/cdn/{S4YZPPXH.js → KAMYTYJT.js} +2 -2
- package/dist/cdn/{F4QOXYGH.js → KANJWHHG.js} +2 -2
- package/dist/cdn/{YFRFTNM4.js → KH7TLMV4.js} +2 -2
- package/dist/cdn/{D6YOAMN6.js → KIDCTLTT.js} +2 -2
- package/dist/cdn/{Y6OFLOPT.js → KIHDYLQD.js} +2 -2
- package/dist/cdn/{55Y3NPXC.js → KNKWOEED.js} +2 -2
- package/dist/cdn/{XYD5LQZ7.js → KNPOLPNI.js} +2 -2
- package/dist/cdn/{D4NG2DKH.js → KQEPSFQ4.js} +2 -2
- package/dist/cdn/{XWLRY4IU.js → KRVQ3PG2.js} +2 -2
- package/dist/cdn/{DHMOLLBL.js → KSCTFR6W.js} +2 -2
- package/dist/cdn/{OEI42XVX.js → KTWFKXEM.js} +2 -2
- package/dist/cdn/KX7B3GC4.js +4 -0
- package/dist/cdn/{KOKAXSJ3.js → KXGXZANH.js} +2 -2
- package/dist/cdn/KYZAF2ZX.js +4 -0
- package/dist/cdn/{E6VNYFTK.js → L3XQSI7T.js} +2 -2
- package/dist/cdn/{RDLASZQL.js → LA3H3WMM.js} +2 -2
- package/dist/cdn/{ETXJCKXM.js → LEFUVWDC.js} +2 -2
- package/dist/cdn/{NX25NZSD.js → LGLMJQGM.js} +1 -1
- package/dist/cdn/{BYKHJKXV.js → LLDKBA7O.js} +2 -2
- package/dist/cdn/{54VN5OXT.js → LSMI7XCP.js} +1 -1
- package/dist/cdn/{R26GJTBL.js → LVLG476F.js} +2 -2
- package/dist/cdn/{FQD3MPL2.js → LWFUENW4.js} +2 -2
- package/dist/cdn/{GX6IUGMJ.js → M3RX2RF3.js} +2 -2
- package/dist/cdn/{54Q55Y2U.js → M5UIWRUG.js} +1 -1
- package/dist/cdn/{QN33I7LZ.js → MKUH4FCW.js} +2 -2
- package/dist/cdn/{V4YQJNMY.js → MMKL2F74.js} +2 -2
- package/dist/cdn/{WBOFE34I.js → MOPBOZ5R.js} +2 -2
- package/dist/cdn/{KXKAKCTY.js → MRPZXEML.js} +2 -2
- package/dist/cdn/{NBDKGDQ3.js → MZIQXHEI.js} +2 -2
- package/dist/cdn/{PEXKY6QE.js → MZYURFVK.js} +1 -1
- package/dist/cdn/{YOTK7QJY.js → N3XH5ROI.js} +2 -2
- package/dist/cdn/{442YTJO3.js → N5RUZKRQ.js} +1 -1
- package/dist/cdn/{HQCO6V6Y.js → NA2CTZIS.js} +2 -2
- package/dist/cdn/{VSK4SSCO.js → NAXQRNSP.js} +1 -1
- package/dist/cdn/{7BISYZUI.js → NDM4GLDC.js} +2 -2
- package/dist/cdn/{BEWLFFYT.js → NEDZUHBT.js} +2 -2
- package/dist/cdn/{FC7NSA73.js → NFQTKGFD.js} +2 -2
- package/dist/cdn/{2BJ3YAJW.js → NGX6XZ4C.js} +2 -2
- package/dist/cdn/{22IQZT6J.js → NLESHSVE.js} +2 -2
- package/dist/cdn/{EPWJ5MH5.js → NNXPCW5J.js} +2 -2
- package/dist/cdn/{PFJJL3K3.js → NTFQ7MA3.js} +1 -1
- package/dist/cdn/{6NI3ICUC.js → O7OELDAC.js} +2 -2
- package/dist/cdn/{ZHL4Y2JO.js → OCMOD2YP.js} +2 -2
- package/dist/cdn/{DTO23XEP.js → OF3ROUNY.js} +2 -2
- package/dist/cdn/{ZKFVGATQ.js → OGKCTLZZ.js} +2 -2
- package/dist/cdn/{LK7J2IL4.js → OGMCZZB7.js} +2 -2
- package/dist/cdn/{B44JDUZ2.js → OLEG34OP.js} +2 -2
- package/dist/cdn/{254J2BPV.js → OQKRPO6T.js} +2 -2
- package/dist/cdn/{2KZEQYTV.js → ORW2ID5T.js} +1 -1
- package/dist/cdn/{V7AWXEB3.js → OX24L6MV.js} +2 -2
- package/dist/cdn/{TOGKYXTE.js → OZ474GXN.js} +2 -2
- package/dist/cdn/{LQQNPFDP.js → OZAF4WBQ.js} +2 -2
- package/dist/cdn/P72Y3NU3.js +4 -0
- package/dist/cdn/{FZFTTC2N.js → PCYGX56K.js} +2 -2
- package/dist/cdn/{LJE5RVH3.js → PLGHYQB7.js} +2 -2
- package/dist/cdn/{AFKJO6CL.js → PNSE3EQY.js} +2 -2
- package/dist/cdn/{ITVEADGM.js → QA5CSQNA.js} +2 -2
- package/dist/cdn/{5S44Y56N.js → QB6QOCNH.js} +2 -2
- package/dist/cdn/{ATIGVK4O.js → QCA2CASB.js} +2 -2
- package/dist/cdn/QDYFQAQZ.js +4 -0
- package/dist/cdn/{UF6K5ZJL.js → QI5OJPHV.js} +1 -1
- package/dist/cdn/{RZDRPSVM.js → QJ5DRYNA.js} +2 -2
- package/dist/cdn/{KRCQW7YP.js → QN5AHKPP.js} +1 -1
- package/dist/cdn/{BNUMYUKI.js → QNZ3EWED.js} +2 -2
- package/dist/cdn/{JLI2QLLS.js → QPRZUSAY.js} +2 -2
- package/dist/cdn/{MIRER6VJ.js → QQNJF4BK.js} +2 -2
- package/dist/cdn/{DGTWF7ZS.js → QS6OENSX.js} +2 -2
- package/dist/cdn/{TLGYR64Y.js → QTWIYCS7.js} +1 -1
- package/dist/cdn/{C37BWQGL.js → QYYRCWN6.js} +2 -2
- package/dist/cdn/{KY7MCT5Q.js → RDYFHICC.js} +1 -1
- package/dist/cdn/{GPOQA3W5.js → RSI4EODJ.js} +2 -2
- package/dist/cdn/{QC7NZJ3S.js → RZRSXL7O.js} +2 -2
- package/dist/cdn/{ZD4PAHDV.js → S3JMC6FS.js} +2 -2
- package/dist/cdn/{IWRWVYE2.js → S7ZXLDYV.js} +2 -2
- package/dist/cdn/{EHO67FFU.js → SD6WBX5T.js} +1 -1
- package/dist/cdn/{N3YIDTVI.js → SJJ76QWS.js} +2 -2
- package/dist/cdn/{3BGTO2BG.js → SQ6MPB4E.js} +2 -2
- package/dist/cdn/{H7A7RVWX.js → SQPBG56D.js} +2 -2
- package/dist/cdn/{VB6LKF6E.js → STURELWO.js} +2 -2
- package/dist/cdn/{HS6FHZDV.js → SZ3UYUGX.js} +2 -2
- package/dist/cdn/{STCGIBGD.js → T2ZOBFB7.js} +2 -2
- package/dist/cdn/{LQYMUUF3.js → T5AK5HXF.js} +2 -2
- package/dist/cdn/{Q7Z5NYII.js → T6SI2BZQ.js} +2 -2
- package/dist/cdn/{FBGSINKC.js → TBEMFSIU.js} +2 -2
- package/dist/cdn/{DTK3LA3J.js → TBNYD6HK.js} +2 -2
- package/dist/cdn/{SXVHHNRC.js → TJARC3T3.js} +2 -2
- package/dist/cdn/{C5ODWBYI.js → TJXAVV35.js} +2 -2
- package/dist/cdn/{TD5NAM5H.js → TQHVY7BA.js} +2 -2
- package/dist/cdn/{TV3E3QAW.js → TREQXXF6.js} +2 -2
- package/dist/cdn/{EHWB6OZE.js → TSVUNFKW.js} +2 -2
- package/dist/cdn/{KBZMR6Y4.js → TT5VHD2D.js} +2 -2
- package/dist/cdn/{NQ3M6L4H.js → TWLOX2QQ.js} +1 -1
- package/dist/cdn/{U3D5OGPP.js → U3RNR32C.js} +2 -2
- package/dist/cdn/{7DVQAKKA.js → UE3UWPGZ.js} +1 -1
- package/dist/cdn/{C6UJS3U4.js → UHD6T5BM.js} +2 -2
- package/dist/cdn/{DM4LW6Q4.js → UHJBCPBX.js} +2 -2
- package/dist/cdn/{BXXJOB4H.js → UJL5BL5F.js} +1 -1
- package/dist/cdn/{7RMVNXMR.js → UV7LEGF3.js} +2 -2
- package/dist/cdn/{5DJFJXBS.js → UWLQE77M.js} +1 -1
- package/dist/cdn/{63NOZPVZ.js → V3QSOB7D.js} +2 -2
- package/dist/cdn/{4YCVI3FS.js → V73IY7OB.js} +2 -2
- package/dist/cdn/{CGMQBOCQ.js → VCQCIAZV.js} +2 -2
- package/dist/cdn/{UHUBSPUI.js → VHQJCMN6.js} +2 -2
- package/dist/cdn/{LNW7XNYY.js → VK4C6LFS.js} +2 -2
- package/dist/cdn/{OHUDAWEX.js → VMAQ5VXC.js} +2 -2
- package/dist/cdn/{RHJUIQ6M.js → VOQIWNCC.js} +2 -2
- package/dist/cdn/{26KCPR7N.js → VRDG2NC5.js} +1 -1
- package/dist/cdn/{6F5NYMCK.js → VT7FWPJI.js} +2 -2
- package/dist/cdn/{PL5JEDPA.js → VTUNBJLK.js} +3 -3
- package/dist/cdn/{26G745RA.js → VXQLS3P3.js} +2 -2
- package/dist/cdn/{DMHRAMQR.js → W5E3NPPL.js} +2 -2
- package/dist/cdn/{NOXDRDHJ.js → W7WUZCJ2.js} +2 -2
- package/dist/cdn/{2734ABSH.js → WWPUJSHA.js} +1 -1
- package/dist/cdn/{CXA2GZLV.js → X5W7JMAK.js} +2 -2
- package/dist/cdn/{NCADJUKG.js → XGEMNF2F.js} +2 -2
- package/dist/cdn/{FFK53NKE.js → XGIAZXUP.js} +2 -2
- package/dist/cdn/{SIN56QR7.js → XGPBKLTN.js} +2 -2
- package/dist/cdn/{EQN33NBW.js → XH23XFLO.js} +2 -2
- package/dist/cdn/{RYT2CJ6F.js → XR6QFG6X.js} +1 -1
- package/dist/cdn/{UMCRNTVU.js → XRONYBJU.js} +2 -2
- package/dist/cdn/{KSN3IAEH.js → XUALJMY4.js} +2 -2
- package/dist/cdn/{TYOYY3PQ.js → XUEL6EID.js} +2 -2
- package/dist/cdn/{H7PCNI2B.js → XVBGOMY3.js} +1 -1
- package/dist/cdn/{2SSFOKDJ.js → Y4DB3DHO.js} +2 -2
- package/dist/cdn/{DSIQEKMO.js → Y6RCZMXF.js} +2 -2
- package/dist/cdn/{AV6ZHPKI.js → Y7QZH73P.js} +1 -1
- package/dist/cdn/{7UP5RDKM.js → Y7RNIA3T.js} +2 -2
- package/dist/cdn/{CLYISB65.js → YBIL24GW.js} +2 -2
- package/dist/cdn/{HYDLFNWZ.js → YDH5HCOY.js} +2 -2
- package/dist/cdn/{6ICUBXEZ.js → YF24FSXE.js} +2 -2
- package/dist/cdn/{PRTIGOIB.js → YMCFOV34.js} +4 -4
- package/dist/cdn/{LOUWTCCR.js → YYB77LS7.js} +2 -2
- package/dist/cdn/{LHUGR2M5.js → ZAXDOGFM.js} +2 -2
- package/dist/cdn/{BL3TWZBW.js → ZCES5YBT.js} +2 -2
- package/dist/cdn/{7S4DT77X.js → ZDNYTZRV.js} +2 -2
- package/dist/cdn/{SGKKUBUH.js → ZMJKOGDX.js} +2 -2
- package/dist/cdn/{UACNTGZ7.js → ZN2MDM5V.js} +2 -2
- package/dist/cdn/{3UJYMJ4M.js → ZQVD7QE2.js} +2 -2
- package/dist/cdn/{2JOMSPJR.js → ZR6KSLXK.js} +2 -2
- package/dist/cdn/{PBZRZP7G.js → ZUGOUKCI.js} +1 -1
- package/dist/cdn/assets/arcgis-pdf-creator/labelFormats.json +1 -191
- package/dist/cdn/assets/buffer-tools/t9n/messages.ar.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.bg.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.bs.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.ca.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.cs.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.da.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.de.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.el.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.en.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.es.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.et.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.fi.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.fr.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.he.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.hr.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.hu.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.id.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.it.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.ja.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.ko.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.lt.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.lv.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.nb.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.nl.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.no.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.pl.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.pt-BR.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.pt-PT.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.ro.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.ru.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.sk.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.sl.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.sr.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.sv.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.th.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.tr.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.uk.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.vi.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.zh-CN.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.zh-HK.json +1 -6
- package/dist/cdn/assets/buffer-tools/t9n/messages.zh-TW.json +1 -6
- package/dist/cdn/assets/card-manager/t9n/messages.ar.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.bg.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.bs.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.ca.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.cs.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.da.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.de.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.el.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.en.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.es.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.et.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.fi.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.fr.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.he.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.hr.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.hu.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.id.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.it.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.ja.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.ko.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.lt.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.lv.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.nb.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.nl.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.no.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.pl.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.pt-BR.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.pt-PT.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.ro.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.ru.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.sk.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.sl.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.sr.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.sv.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.th.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.tr.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.uk.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.vi.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.zh-CN.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.zh-HK.json +1 -7
- package/dist/cdn/assets/card-manager/t9n/messages.zh-TW.json +1 -7
- package/dist/cdn/assets/consent-manager/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.nb.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/consent-manager/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/create-feature/t9n/messages.ar.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.bg.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.bs.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.ca.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.cs.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.da.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.de.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.el.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.en.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.es.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.et.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.fi.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.fr.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.he.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.hr.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.hu.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.id.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.it.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.ja.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.ko.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.lt.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.lv.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.nb.json +1 -5
- package/dist/cdn/assets/create-feature/t9n/messages.nl.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.no.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.pl.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.pt-BR.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.pt-PT.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.ro.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.ru.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.sk.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.sl.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.sr.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.sv.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.th.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.tr.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.uk.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.vi.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.zh-CN.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.zh-HK.json +1 -7
- package/dist/cdn/assets/create-feature/t9n/messages.zh-TW.json +1 -7
- package/dist/cdn/assets/create-related-feature/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.nb.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/create-related-feature/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.ar.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.bg.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.bs.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.ca.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.cs.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.da.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.de.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.el.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.en.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.es.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.et.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.fi.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.fr.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.he.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.hr.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.hu.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.id.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.it.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.ja.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.ko.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.lt.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.lv.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.nb.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.nl.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.no.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.pl.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.pt-BR.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.pt-PT.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.ro.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.ru.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.sk.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.sl.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.sr.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.sv.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.th.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.tr.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.uk.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.vi.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.zh-CN.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.zh-HK.json +1 -15
- package/dist/cdn/assets/crowdsource-manager/t9n/messages.zh-TW.json +1 -15
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ar.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.bg.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.bs.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ca.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.cs.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.da.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.de.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.el.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.en.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.es.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.et.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.fi.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.fr.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.he.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.hr.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.hu.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.id.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.it.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ja.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ko.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.lt.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.lv.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.nb.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.nl.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.no.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.pl.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.pt-BR.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.pt-PT.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ro.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ru.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.sk.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.sl.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.sr.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.sv.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.th.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.tr.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.uk.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.vi.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.zh-CN.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.zh-HK.json +1 -32
- package/dist/cdn/assets/crowdsource-reporter/t9n/messages.zh-TW.json +1 -32
- package/dist/cdn/assets/delete-button/t9n/messages.ar.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.bg.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.bs.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.ca.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.cs.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.da.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.de.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.el.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.en.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.es.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.et.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.fi.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.fr.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.he.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.hr.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.hu.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.id.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.it.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.ja.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.ko.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.lt.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.lv.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.nb.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.nl.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.no.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.pl.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.pt-BR.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.pt-PT.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.ro.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.ru.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.sk.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.sl.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.sr.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.sv.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.th.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.tr.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.uk.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.vi.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.zh-CN.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.zh-HK.json +1 -8
- package/dist/cdn/assets/delete-button/t9n/messages.zh-TW.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.ar.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.bg.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.bs.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.ca.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.cs.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.da.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.de.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.el.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.en.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.es.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.et.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.fi.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.fr.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.he.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.hr.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.hu.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.id.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.it.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.ja.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.ko.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.lt.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.lv.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.nb.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.nl.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.no.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.pl.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.pt-BR.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.pt-PT.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.ro.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.ru.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.sk.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.sl.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.sr.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.sv.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.th.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.tr.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.uk.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.vi.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.zh-CN.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.zh-HK.json +1 -8
- package/dist/cdn/assets/delete-dialog/t9n/messages.zh-TW.json +1 -8
- package/dist/cdn/assets/edit-card/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.nb.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/edit-card/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/feature-list/t9n/messages.ar.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.bg.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.bs.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.ca.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.cs.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.da.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.de.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.el.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.en.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.es.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.et.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.fi.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.fr.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.he.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.hr.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.hu.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.id.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.it.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.ja.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.ko.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.lt.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.lv.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.nb.json +1 -8
- package/dist/cdn/assets/feature-list/t9n/messages.nl.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.no.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.pl.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.pt-BR.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.pt-PT.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.ro.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.ru.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.sk.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.sl.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.sr.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.sv.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.th.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.tr.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.uk.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.vi.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.zh-CN.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.zh-HK.json +1 -9
- package/dist/cdn/assets/feature-list/t9n/messages.zh-TW.json +1 -9
- package/dist/cdn/assets/field-selection/t9n/messages.ar.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.bg.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.bs.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.ca.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.cs.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.da.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.de.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.el.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.en.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.es.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.et.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.fi.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.fr.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.he.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.hr.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.hu.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.id.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.it.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.ja.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.ko.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.lt.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.lv.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.nl.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.no.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.pl.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.pt-BR.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.pt-PT.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.ro.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.ru.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.sk.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.sl.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.sr.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.sv.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.th.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.tr.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.uk.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.vi.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.zh-CN.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.zh-HK.json +1 -18
- package/dist/cdn/assets/field-selection/t9n/messages.zh-TW.json +1 -18
- package/dist/cdn/assets/info-card/t9n/messages.ar.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.bg.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.bs.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.ca.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.cs.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.da.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.de.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.el.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.en.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.es.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.et.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.fi.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.fr.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.he.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.hr.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.hu.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.id.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.it.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.ja.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.ko.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.lt.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.lv.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.nb.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.nl.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.no.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.pl.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.pt-BR.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.pt-PT.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.ro.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.ru.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.sk.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.sl.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.sr.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.sv.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.th.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.tr.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.uk.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.vi.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.zh-CN.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.zh-HK.json +1 -10
- package/dist/cdn/assets/info-card/t9n/messages.zh-TW.json +1 -10
- package/dist/cdn/assets/json-editor/monaco-editor/bundleInfo.json +1 -5370
- package/dist/cdn/assets/json-editor/monaco-editor/nls.metadata.json +1 -2627
- package/dist/cdn/assets/json-editor/monaco-editor/package.json +1 -63
- package/dist/cdn/assets/json-editor/t9n/messages.ar.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.bg.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.bs.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.ca.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.cs.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.da.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.de.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.el.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.en.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.es.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.et.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.fi.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.fr.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.he.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.hr.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.hu.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.id.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.it.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.ja.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.ko.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.lt.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.lv.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.nl.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.no.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.pl.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.pt-BR.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.pt-PT.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.ro.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.ru.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.sk.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.sl.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.sr.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.sv.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.th.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.tr.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.uk.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.vi.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.zh-CN.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.zh-HK.json +1 -8
- package/dist/cdn/assets/json-editor/t9n/messages.zh-TW.json +1 -8
- package/dist/cdn/assets/layer-list/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.nb.json +1 -4
- package/dist/cdn/assets/layer-list/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/layer-list/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/layer-table/t9n/messages.ar.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.bg.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.bs.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.ca.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.cs.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.da.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.de.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.el.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.en.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.es.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.et.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.fi.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.fr.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.he.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.hr.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.hu.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.id.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.it.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.ja.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.ko.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.lt.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.lv.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.nb.json +1 -25
- package/dist/cdn/assets/layer-table/t9n/messages.nl.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.no.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.pl.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.pt-BR.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.pt-PT.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.ro.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.ru.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.sk.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.sl.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.sr.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.sv.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.th.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.tr.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.uk.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.vi.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.zh-CN.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.zh-HK.json +1 -27
- package/dist/cdn/assets/layer-table/t9n/messages.zh-TW.json +1 -27
- package/dist/cdn/assets/map-card/t9n/messages.ar.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.bg.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.bs.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.ca.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.cs.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.da.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.de.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.el.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.en.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.es.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.et.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.fi.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.fr.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.he.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.hr.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.hu.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.id.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.it.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.ja.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.ko.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.lt.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.lv.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.nb.json +1 -10
- package/dist/cdn/assets/map-card/t9n/messages.nl.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.no.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.pl.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.pt-BR.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.pt-PT.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.ro.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.ru.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.sk.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.sl.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.sr.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.sv.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.th.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.tr.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.uk.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.vi.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.zh-CN.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.zh-HK.json +1 -11
- package/dist/cdn/assets/map-card/t9n/messages.zh-TW.json +1 -11
- package/dist/cdn/assets/map-draw-tools/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.nb.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/map-draw-tools/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.nb.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/map-layer-picker/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/map-picker/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.nb.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/map-picker/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/map-search/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/map-select-tools/t9n/messages.ar.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.bg.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.bs.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.ca.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.cs.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.da.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.de.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.el.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.en.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.es.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.et.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.fi.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.fr.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.he.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.hr.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.hu.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.id.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.it.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.ja.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.ko.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.lt.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.lv.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.nb.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.nl.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.no.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.pl.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.pt-BR.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.pt-PT.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.ro.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.ru.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.sk.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.sl.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.sr.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.sv.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.th.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.tr.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.uk.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.vi.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.zh-CN.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.zh-HK.json +1 -16
- package/dist/cdn/assets/map-select-tools/t9n/messages.zh-TW.json +1 -16
- package/dist/cdn/assets/map-tools/t9n/messages.ar.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.bg.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.bs.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.ca.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.cs.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.da.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.de.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.el.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.en.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.es.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.et.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.fi.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.fr.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.he.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.hr.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.hu.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.id.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.it.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.ja.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.ko.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.lt.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.lv.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.nb.json +1 -10
- package/dist/cdn/assets/map-tools/t9n/messages.nl.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.no.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.pl.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.pt-BR.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.pt-PT.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.ro.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.ru.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.sk.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.sl.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.sr.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.sv.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.th.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.tr.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.uk.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.vi.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.zh-CN.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.zh-HK.json +1 -12
- package/dist/cdn/assets/map-tools/t9n/messages.zh-TW.json +1 -12
- package/dist/cdn/assets/pdf-download/data/labelFormats.json +1 -191
- package/dist/cdn/assets/pdf-download/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.nb.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/pdf-download/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/public-notification/t9n/messages.ar.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.bg.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.bs.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.ca.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.cs.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.da.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.de.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.el.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.en.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.es.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.et.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.fi.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.fr.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.he.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.hr.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.hu.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.id.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.it.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.ja.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.ko.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.lt.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.lv.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.nb.json +1 -44
- package/dist/cdn/assets/public-notification/t9n/messages.nl.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.no.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.pl.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.pt-BR.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.pt-PT.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.ro.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.ru.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.sk.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.sl.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.sr.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.sv.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.th.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.tr.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.uk.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.vi.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.zh-CN.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.zh-HK.json +1 -43
- package/dist/cdn/assets/public-notification/t9n/messages.zh-TW.json +1 -43
- package/dist/cdn/assets/refine-selection/t9n/messages.ar.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.bg.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.bs.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.ca.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.cs.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.da.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.de.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.el.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.en.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.es.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.et.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.fi.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.fr.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.he.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.hr.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.hu.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.id.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.it.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.ja.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.ko.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.lt.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.lv.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.nb.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.nl.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.no.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.pl.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.pt-BR.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.pt-PT.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.ro.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.ru.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.sk.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.sl.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.sr.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.sv.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.th.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.tr.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.uk.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.vi.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.zh-CN.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.zh-HK.json +1 -9
- package/dist/cdn/assets/refine-selection/t9n/messages.zh-TW.json +1 -9
- package/dist/cdn/assets/solution-article-card/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/solution-article-card/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/solution-configuration/t9n/messages.ar.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.bg.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.bs.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.ca.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.cs.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.da.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.de.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.el.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.en.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.es.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.et.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.fi.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.fr.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.he.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.hr.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.hu.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.id.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.it.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.ja.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.ko.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.lt.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.lv.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.nl.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.no.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.pl.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.pt-BR.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.pt-PT.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.ro.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.ru.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.sk.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.sl.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.sr.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.sv.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.th.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.tr.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.uk.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.vi.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.zh-CN.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.zh-HK.json +1 -15
- package/dist/cdn/assets/solution-configuration/t9n/messages.zh-TW.json +1 -15
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ar.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.bg.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.bs.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ca.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.cs.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.da.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.de.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.el.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.en.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.es.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.et.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.fi.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.fr.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.he.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.hr.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.hu.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.id.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.it.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ja.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ko.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.lt.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.lv.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.nl.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.no.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.pl.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.pt-BR.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.pt-PT.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ro.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ru.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.sk.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.sl.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.sr.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.sv.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.th.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.tr.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.uk.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.vi.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.zh-CN.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.zh-HK.json +1 -43
- package/dist/cdn/assets/solution-configure-dialog/t9n/messages.zh-TW.json +1 -43
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.ar.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.bg.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.bs.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.ca.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.cs.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.da.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.de.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.el.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.en.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.es.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.et.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.fi.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.fr.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.he.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.hr.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.hu.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.id.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.it.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.ja.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.ko.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.lt.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.lv.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.nl.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.no.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.pl.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.pt-BR.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.pt-PT.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.ro.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.ru.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.sk.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.sl.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.sr.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.sv.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.th.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.tr.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.uk.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.vi.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.zh-CN.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.zh-HK.json +1 -13
- package/dist/cdn/assets/solution-configure-titles/t9n/messages.zh-TW.json +1 -13
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ar.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.bg.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.bs.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ca.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.cs.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.da.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.de.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.el.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.en.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.es.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.et.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.fi.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.fr.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.he.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.hr.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.hu.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.id.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.it.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ja.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ko.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.lt.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.lv.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.nl.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.no.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.pl.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.pt-BR.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.pt-PT.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ro.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ru.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.sk.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.sl.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.sr.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.sv.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.th.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.tr.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.uk.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.vi.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.zh-CN.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.zh-HK.json +1 -11
- package/dist/cdn/assets/solution-delete-dialog/t9n/messages.zh-TW.json +1 -11
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ar.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.bg.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.bs.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ca.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.cs.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.da.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.de.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.el.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.en.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.es.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.et.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.fi.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.fr.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.he.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.hr.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.hu.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.id.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.it.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ja.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ko.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.lt.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.lv.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.nl.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.no.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.pl.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.pt-BR.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.pt-PT.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ro.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ru.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.sk.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.sl.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.sr.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.sv.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.th.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.tr.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.uk.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.vi.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.zh-CN.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.zh-HK.json +1 -21
- package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.zh-TW.json +1 -21
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.ar.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.bg.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.bs.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.ca.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.cs.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.da.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.de.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.el.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.en.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.es.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.et.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.fi.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.fr.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.he.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.hr.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.hu.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.id.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.it.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.ja.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.ko.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.lt.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.lv.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.nl.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.no.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.pl.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.pt-BR.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.pt-PT.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.ro.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.ru.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.sk.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.sl.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.sr.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.sv.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.th.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.tr.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.uk.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.vi.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.zh-CN.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.zh-HK.json +1 -13
- package/dist/cdn/assets/solution-deployed-card/t9n/messages.zh-TW.json +1 -13
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ar.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.bg.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.bs.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ca.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.cs.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.da.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.de.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.el.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.en.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.es.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.et.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.fi.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.fr.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.he.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.hr.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.hu.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.id.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.it.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ja.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ko.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.lt.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.lv.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.nl.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.no.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.pl.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.pt-BR.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.pt-PT.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ro.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ru.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.sk.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.sl.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.sr.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.sv.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.th.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.tr.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.uk.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.vi.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.zh-CN.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.zh-HK.json +1 -16
- package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.zh-TW.json +1 -16
- package/dist/cdn/assets/solution-details-card/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/solution-details-card/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/solution-details-panel/t9n/messages.ar.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.bg.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.bs.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.ca.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.cs.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.da.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.de.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.el.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.en.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.es.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.et.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.fi.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.fr.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.he.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.hr.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.hu.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.id.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.it.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.ja.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.ko.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.lt.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.lv.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.nl.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.no.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.pl.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.pt-BR.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.pt-PT.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.ro.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.ru.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.sk.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.sl.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.sr.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.sv.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.th.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.tr.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.uk.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.vi.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.zh-CN.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.zh-HK.json +1 -62
- package/dist/cdn/assets/solution-details-panel/t9n/messages.zh-TW.json +1 -62
- package/dist/cdn/assets/solution-item/t9n/messages.ar.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.bg.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.bs.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.ca.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.cs.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.da.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.de.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.el.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.en.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.es.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.et.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.fi.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.fr.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.he.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.hr.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.hu.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.id.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.it.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.ja.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.ko.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.lt.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.lv.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.nl.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.no.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.pl.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.pt-BR.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.pt-PT.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.ro.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.ru.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.sk.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.sl.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.sr.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.sv.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.th.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.tr.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.uk.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.vi.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.zh-CN.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.zh-HK.json +1 -8
- package/dist/cdn/assets/solution-item/t9n/messages.zh-TW.json +1 -8
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.nb.json +1 -3
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/solution-item-accordion/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/solution-item-details/t9n/messages.ar.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.bg.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.bs.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.ca.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.cs.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.da.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.de.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.el.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.en.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.es.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.et.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.fi.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.fr.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.he.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.hr.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.hu.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.id.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.it.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.ja.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.ko.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.lt.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.lv.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.nl.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.no.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.pl.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.pt-BR.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.pt-PT.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.ro.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.ru.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.sk.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.sl.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.sr.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.sv.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.th.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.tr.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.uk.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.vi.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.zh-CN.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.zh-HK.json +1 -8
- package/dist/cdn/assets/solution-item-details/t9n/messages.zh-TW.json +1 -8
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.ar.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.bg.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.bs.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.ca.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.cs.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.da.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.de.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.el.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.en.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.es.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.et.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.fi.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.fr.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.he.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.hr.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.hu.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.id.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.it.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.ja.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.ko.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.lt.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.lv.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.nl.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.no.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.pl.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.pt-BR.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.pt-PT.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.ro.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.ru.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.sk.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.sl.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.sr.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.sv.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.th.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.tr.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.uk.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.vi.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.zh-CN.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.zh-HK.json +1 -9
- package/dist/cdn/assets/solution-item-diagram/t9n/messages.zh-TW.json +1 -9
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/solution-item-sharing/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/solution-organization-variables/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/solution-resource-item/t9n/messages.ar.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.bg.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.bs.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.ca.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.cs.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.da.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.de.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.el.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.en.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.es.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.et.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.fi.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.fr.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.he.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.hr.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.hu.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.id.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.it.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.ja.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.ko.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.lt.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.lv.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.nl.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.no.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.pl.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.pt-BR.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.pt-PT.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.ro.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.ru.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.sk.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.sl.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.sr.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.sv.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.th.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.tr.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.uk.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.vi.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.zh-CN.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.zh-HK.json +1 -8
- package/dist/cdn/assets/solution-resource-item/t9n/messages.zh-TW.json +1 -8
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/solution-social-share/t9n/messages.ar.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.bg.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.bs.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.ca.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.cs.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.da.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.de.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.el.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.en.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.es.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.et.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.fi.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.fr.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.he.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.hr.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.hu.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.id.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.it.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.ja.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.ko.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.lt.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.lv.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.nl.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.no.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.pl.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.pt-BR.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.pt-PT.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.ro.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.ru.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.sk.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.sl.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.sr.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.sv.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.th.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.tr.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.uk.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.vi.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.zh-CN.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.zh-HK.json +1 -31
- package/dist/cdn/assets/solution-social-share/t9n/messages.zh-TW.json +1 -31
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/solution-spatial-ref/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/solution-template-data/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/solution-variables/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/solution-variables/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.ar.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.bg.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.bs.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.ca.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.cs.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.da.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.de.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.el.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.en.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.es.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.et.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.fi.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.fr.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.he.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.hr.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.hu.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.id.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.it.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.ja.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.ko.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.lt.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.lv.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.nl.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.no.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.pl.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.pt-BR.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.pt-PT.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.ro.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.ru.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.sk.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.sl.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.sr.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.sv.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.th.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.tr.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.uk.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.vi.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.zh-CN.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.zh-HK.json +1 -4
- package/dist/cdn/assets/solutions-all-panel/t9n/messages.zh-TW.json +1 -4
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.ar.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.bg.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.bs.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.ca.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.cs.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.da.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.de.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.el.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.en.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.es.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.et.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.fi.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.fr.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.he.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.hr.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.hu.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.id.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.it.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.ja.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.ko.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.lt.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.lv.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.nl.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.no.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.pl.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.pt-BR.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.pt-PT.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.ro.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.ru.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.sk.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.sl.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.sr.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.sv.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.th.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.tr.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.uk.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.vi.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.zh-CN.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.zh-HK.json +1 -9
- package/dist/cdn/assets/solutions-all-shell/t9n/messages.zh-TW.json +1 -9
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/solutions-article-panel/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/solutions-articles/t9n/messages.ar.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.bg.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.bs.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.ca.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.cs.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.da.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.de.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.el.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.en.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.es.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.et.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.fi.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.fr.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.he.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.hr.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.hu.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.id.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.it.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.ja.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.ko.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.lt.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.lv.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.nl.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.no.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.pl.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.pt-BR.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.pt-PT.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.ro.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.ru.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.sk.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.sl.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.sr.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.sv.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.th.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.tr.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.uk.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.vi.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.zh-CN.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.zh-HK.json +1 -5
- package/dist/cdn/assets/solutions-articles/t9n/messages.zh-TW.json +1 -5
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/solutions-articles-shell/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ar.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.bg.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.bs.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ca.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.cs.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.da.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.de.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.el.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.en.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.es.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.et.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.fi.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.fr.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.he.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.hr.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.hu.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.id.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.it.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ja.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ko.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.lt.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.lv.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.nl.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.no.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.pl.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.pt-BR.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.pt-PT.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ro.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ru.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.sk.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.sl.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.sr.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.sv.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.th.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.tr.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.uk.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.vi.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.zh-CN.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.zh-HK.json +1 -6
- package/dist/cdn/assets/solutions-deploy-app/t9n/messages.zh-TW.json +1 -6
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ar.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.bg.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.bs.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ca.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.cs.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.da.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.de.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.el.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.en.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.es.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.et.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.fi.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.fr.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.he.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.hr.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.hu.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.id.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.it.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ja.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ko.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.lt.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.lv.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.nl.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.no.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.pl.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.pt-BR.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.pt-PT.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ro.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ru.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.sk.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.sl.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.sr.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.sv.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.th.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.tr.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.uk.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.vi.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.zh-CN.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.zh-HK.json +1 -8
- package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.zh-TW.json +1 -8
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ar.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.bg.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.bs.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ca.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.cs.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.da.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.de.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.el.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.en.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.es.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.et.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.fi.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.fr.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.he.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.hr.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.hu.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.id.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.it.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ja.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ko.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.lt.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.lv.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.nl.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.no.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.pl.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.pt-BR.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.pt-PT.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ro.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ru.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.sk.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.sl.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.sr.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.sv.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.th.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.tr.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.uk.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.vi.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.zh-CN.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.zh-HK.json +1 -7
- package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.zh-TW.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ar.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.bg.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.bs.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ca.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.cs.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.da.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.de.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.el.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.en.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.es.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.et.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.fi.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.fr.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.he.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.hr.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.hu.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.id.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.it.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ja.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ko.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.lt.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.lv.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.nl.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.no.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.pl.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.pt-BR.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.pt-PT.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ro.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ru.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.sk.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.sl.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.sr.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.sv.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.th.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.tr.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.uk.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.vi.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.zh-CN.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.zh-HK.json +1 -7
- package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.zh-TW.json +1 -7
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ar.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.bg.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.bs.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ca.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.cs.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.da.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.de.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.el.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.en.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.es.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.et.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.fi.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.fr.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.he.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.hr.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.hu.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.id.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.it.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ja.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ko.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.lt.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.lv.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.nl.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.no.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.pl.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.pt-BR.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.pt-PT.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ro.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ru.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.sk.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.sl.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.sr.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.sv.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.th.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.tr.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.uk.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.vi.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.zh-CN.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.zh-HK.json +1 -49
- package/dist/cdn/assets/solutions-filter-panel/t9n/messages.zh-TW.json +1 -49
- package/dist/cdn/assets/spatial-ref/t9n/messages.ar.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.bg.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.bs.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.ca.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.cs.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.da.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.de.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.el.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.en.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.es.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.et.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.fi.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.fr.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.he.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.hr.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.hu.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.id.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.it.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.ja.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.ko.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.lt.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.lv.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.nl.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.no.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.pl.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.pt-BR.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.pt-PT.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.ro.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.ru.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.sk.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.sl.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.sr.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.sv.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.th.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.tr.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.uk.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.vi.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.zh-CN.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.zh-HK.json +1 -3
- package/dist/cdn/assets/spatial-ref/t9n/messages.zh-TW.json +1 -3
- package/dist/cdn/index.js +2 -2
- package/dist/chunks/Auth.js +1 -2
- package/dist/chunks/CardsFetcher.js +1 -2
- package/dist/chunks/appConfig.js +1 -2
- package/dist/chunks/cardFetchingUtils.js +1 -2
- package/dist/chunks/cardsHelpers.js +1 -2
- package/dist/chunks/common.js +1 -2
- package/dist/chunks/deployAppContexts.js +1 -2
- package/dist/chunks/downloadUtils.js +1 -2
- package/dist/chunks/getItemIcon.js +1 -2
- package/dist/chunks/helpers.js +1 -2
- package/dist/chunks/interfaces.js +1 -2
- package/dist/chunks/loadModules.js +1 -2
- package/dist/chunks/mapViewUtils.js +1 -2
- package/dist/chunks/pciUtils.js +1 -2
- package/dist/chunks/popupUtils.js +1 -2
- package/dist/chunks/prepareDataForSolutionDisplay.js +1 -2
- package/dist/chunks/privilegeUtils.js +1 -2
- package/dist/chunks/publicNotificationContext.js +1 -2
- package/dist/chunks/queryUtils.js +1 -2
- package/dist/chunks/runtime.js +1 -2
- package/dist/chunks/solution-store.js +1 -2
- package/dist/chunks/templates.js +1 -2
- package/dist/chunks/useT9n.js +1 -2
- package/dist/components/arcgis-solutions-assistant/customElement.d.ts +1 -0
- package/dist/components/arcgis-solutions-assistant/customElement.js +1 -2
- package/dist/components/basemap-gallery/customElement.d.ts +7 -0
- package/dist/components/basemap-gallery/customElement.js +1 -2
- package/dist/components/buffer-tools/customElement.d.ts +45 -0
- package/dist/components/buffer-tools/customElement.js +1 -2
- package/dist/components/card-manager/customElement.d.ts +49 -0
- package/dist/components/card-manager/customElement.js +1 -2
- package/dist/components/consent-manager/customElement.d.ts +33 -0
- package/dist/components/consent-manager/customElement.js +1 -2
- package/dist/components/create-feature/customElement.d.ts +98 -0
- package/dist/components/create-feature/customElement.js +1 -2
- package/dist/components/create-related-feature/customElement.d.ts +24 -0
- package/dist/components/create-related-feature/customElement.js +1 -2
- package/dist/components/crowdsource-manager/customElement.d.ts +191 -0
- package/dist/components/crowdsource-manager/customElement.js +1 -2
- package/dist/components/crowdsource-reporter/customElement.d.ts +183 -0
- package/dist/components/crowdsource-reporter/customElement.js +1 -2
- package/dist/components/deduct-calculator/customElement.d.ts +1 -0
- package/dist/components/deduct-calculator/customElement.js +1 -2
- package/dist/components/delete-button/customElement.d.ts +25 -0
- package/dist/components/delete-button/customElement.js +1 -2
- package/dist/components/delete-dialog/customElement.d.ts +9 -0
- package/dist/components/delete-dialog/customElement.js +1 -2
- package/dist/components/edit-card/customElement.d.ts +34 -0
- package/dist/components/edit-card/customElement.js +1 -2
- package/dist/components/feature-details/customElement.d.ts +33 -0
- package/dist/components/feature-details/customElement.js +1 -2
- package/dist/components/feature-list/customElement.d.ts +77 -0
- package/dist/components/feature-list/customElement.js +1 -2
- package/dist/components/field-selection/customElement.d.ts +4 -0
- package/dist/components/field-selection/customElement.js +1 -2
- package/dist/components/floor-filter/customElement.d.ts +14 -0
- package/dist/components/floor-filter/customElement.js +1 -2
- package/dist/components/info-card/customElement.d.ts +64 -0
- package/dist/components/info-card/customElement.js +1 -2
- package/dist/components/json-editor/customElement.d.ts +49 -0
- package/dist/components/json-editor/customElement.js +1 -2
- package/dist/components/layer-list/customElement.d.ts +32 -0
- package/dist/components/layer-list/customElement.js +1 -2
- package/dist/components/layer-table/customElement.d.ts +99 -0
- package/dist/components/layer-table/customElement.js +1 -2
- package/dist/components/map-card/customElement.d.ts +155 -0
- package/dist/components/map-card/customElement.js +1 -2
- package/dist/components/map-draw-tools/customElement.d.ts +47 -0
- package/dist/components/map-draw-tools/customElement.js +1 -2
- package/dist/components/map-fullscreen/customElement.d.ts +3 -0
- package/dist/components/map-fullscreen/customElement.js +1 -2
- package/dist/components/map-layer-picker/customElement.d.ts +84 -0
- package/dist/components/map-layer-picker/customElement.js +1 -2
- package/dist/components/map-legend/customElement.d.ts +6 -0
- package/dist/components/map-legend/customElement.js +1 -2
- package/dist/components/map-picker/customElement.d.ts +30 -0
- package/dist/components/map-picker/customElement.js +1 -2
- package/dist/components/map-search/customElement.d.ts +19 -0
- package/dist/components/map-search/customElement.js +1 -2
- package/dist/components/map-select-tools/customElement.d.ts +83 -0
- package/dist/components/map-select-tools/customElement.js +1 -2
- package/dist/components/map-tools/customElement.d.ts +113 -0
- package/dist/components/map-tools/customElement.js +1 -2
- package/dist/components/pci-calculator/customElement.js +1 -2
- package/dist/components/pdf-download/customElement.d.ts +25 -0
- package/dist/components/pdf-download/customElement.js +1 -2
- package/dist/components/public-notification/customElement.d.ts +113 -0
- package/dist/components/public-notification/customElement.js +1 -2
- package/dist/components/refine-selection/customElement.d.ts +12 -0
- package/dist/components/refine-selection/customElement.js +1 -2
- package/dist/components/selection-tool/customElement.d.ts +14 -0
- package/dist/components/selection-tool/customElement.js +1 -2
- package/dist/components/solution-article-card/customElement.d.ts +26 -0
- package/dist/components/solution-article-card/customElement.js +1 -2
- package/dist/components/solution-configuration/customElement.d.ts +12 -0
- package/dist/components/solution-configuration/customElement.js +1 -2
- package/dist/components/solution-configure-dialog/customElement.d.ts +17 -0
- package/dist/components/solution-configure-dialog/customElement.js +1 -2
- package/dist/components/solution-configure-titles/customElement.d.ts +9 -0
- package/dist/components/solution-configure-titles/customElement.js +1 -2
- package/dist/components/solution-contents/customElement.d.ts +14 -0
- package/dist/components/solution-contents/customElement.js +1 -2
- package/dist/components/solution-delete-dialog/customElement.d.ts +15 -0
- package/dist/components/solution-delete-dialog/customElement.js +1 -2
- package/dist/components/solution-deploy-dialog/customElement.d.ts +22 -0
- package/dist/components/solution-deploy-dialog/customElement.js +1 -2
- package/dist/components/solution-deployed-card/customElement.d.ts +26 -0
- package/dist/components/solution-deployed-card/customElement.js +1 -2
- package/dist/components/solution-deploying-dialog/customElement.d.ts +15 -0
- package/dist/components/solution-deploying-dialog/customElement.js +1 -2
- package/dist/components/solution-details-card/customElement.d.ts +2 -0
- package/dist/components/solution-details-card/customElement.js +7 -8
- package/dist/components/solution-details-panel/customElement.d.ts +4 -0
- package/dist/components/solution-details-panel/customElement.js +1 -2
- package/dist/components/solution-item/customElement.d.ts +16 -0
- package/dist/components/solution-item/customElement.js +1 -2
- package/dist/components/solution-item-accordion/customElement.d.ts +36 -0
- package/dist/components/solution-item-accordion/customElement.js +1 -2
- package/dist/components/solution-item-details/customElement.d.ts +5 -0
- package/dist/components/solution-item-details/customElement.js +1 -2
- package/dist/components/solution-item-diagram/customElement.d.ts +2 -0
- package/dist/components/solution-item-diagram/customElement.js +1 -2
- package/dist/components/solution-item-icon/customElement.d.ts +11 -0
- package/dist/components/solution-item-icon/customElement.js +1 -2
- package/dist/components/solution-item-sharing/customElement.d.ts +5 -0
- package/dist/components/solution-item-sharing/customElement.js +1 -2
- package/dist/components/solution-organization-variables/customElement.d.ts +5 -0
- package/dist/components/solution-organization-variables/customElement.js +1 -2
- package/dist/components/solution-resource-item/customElement.d.ts +7 -0
- package/dist/components/solution-resource-item/customElement.js +1 -2
- package/dist/components/solution-snapshot-gallery/customElement.d.ts +8 -0
- package/dist/components/solution-snapshot-gallery/customElement.js +1 -2
- package/dist/components/solution-social-share/customElement.d.ts +92 -0
- package/dist/components/solution-social-share/customElement.js +1 -2
- package/dist/components/solution-spatial-ref/customElement.d.ts +20 -0
- package/dist/components/solution-spatial-ref/customElement.js +1 -2
- package/dist/components/solution-template-data/customElement.d.ts +22 -0
- package/dist/components/solution-template-data/customElement.js +1 -2
- package/dist/components/solution-variables/customElement.d.ts +5 -0
- package/dist/components/solution-variables/customElement.js +1 -2
- package/dist/components/solutions-all-panel/customElement.d.ts +37 -0
- package/dist/components/solutions-all-panel/customElement.js +30 -24
- package/dist/components/solutions-all-shell/customElement.d.ts +19 -1
- package/dist/components/solutions-all-shell/customElement.js +1 -2
- package/dist/components/solutions-article-panel/customElement.d.ts +10 -0
- package/dist/components/solutions-article-panel/customElement.js +1 -2
- package/dist/components/solutions-articles/customElement.d.ts +1 -0
- package/dist/components/solutions-articles/customElement.js +1 -2
- package/dist/components/solutions-articles-shell/customElement.js +1 -2
- package/dist/components/solutions-deploy-app/customElement.d.ts +38 -1
- package/dist/components/solutions-deploy-app/customElement.js +46 -36
- package/dist/components/solutions-deployed-filter-panel/customElement.d.ts +35 -0
- package/dist/components/solutions-deployed-filter-panel/customElement.js +1 -2
- package/dist/components/solutions-deployed-panel/customElement.d.ts +38 -0
- package/dist/components/solutions-deployed-panel/customElement.js +1 -2
- package/dist/components/solutions-deployed-shell/customElement.d.ts +19 -1
- package/dist/components/solutions-deployed-shell/customElement.js +1 -2
- package/dist/components/solutions-filter-panel/customElement.d.ts +26 -0
- package/dist/components/solutions-filter-panel/customElement.js +1 -2
- package/dist/components/spatial-ref/customElement.d.ts +29 -0
- package/dist/components/spatial-ref/customElement.js +1 -2
- package/dist/components/store-manager/customElement.d.ts +12 -0
- package/dist/components/store-manager/customElement.js +1 -2
- package/dist/docs/api.json +167 -181
- package/dist/docs/docs.json +80 -90
- package/dist/docs/vscode.html-custom-data.json +10 -10
- package/dist/docs/web-types.json +77 -77
- package/dist/index.js +1 -2
- package/dist/loader.js +1 -2
- package/dist/types/preact.d.ts +74 -74
- package/dist/types/preact10.d.ts +623 -0
- package/dist/utils/interfaces.d.ts +1 -1
- package/package.json +19 -19
- package/dist/cdn/DAHTXMBD.js +0 -18
- package/dist/cdn/EJ5MXJ4L.js +0 -4
- package/dist/cdn/MT6GA5XY.js +0 -18
- package/dist/cdn/NAGICQWY.js +0 -4
- package/dist/cdn/O5C3YLJE.js +0 -4
- package/dist/cdn/QLFISHK2.js +0 -4
- package/dist/cdn/QZFQNFNX.js +0 -4
- package/dist/cdn/RFZSMTAS.js +0 -4
- package/dist/cdn/RJK57CKL.js +0 -4
- package/dist/cdn/VJFEHP5L.js +0 -4
- package/dist/cdn/WUVU4M3M.js +0 -4
@@ -4,7 +4,7 @@ import { LitElement as zi, createEvent as Wi } from "@arcgis/lumina";
|
|
4
4
|
import { css as Vi } from "lit";
|
5
5
|
/*! All material copyright Esri, All Rights Reserved, unless otherwise specified.
|
6
6
|
See https://js.arcgis.com/1.1/esri/copyright.txt for details.
|
7
|
-
v1.1.0-next.20250917.
|
7
|
+
v1.1.0-next.20250917.3 */
|
8
8
|
function Gi(e = {}) {
|
9
9
|
const { disabled: t, portal: r } = e;
|
10
10
|
return t || r?.eueiEnabled === !1 ? !0 : !(!r || Hi(r) || Fi(r) || Ki(r));
|
@@ -5723,4 +5723,3 @@ Ui("consent-manager", ec);
|
|
5723
5723
|
export {
|
5724
5724
|
ec as ConsentManager
|
5725
5725
|
};
|
5726
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tRWxlbWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL3RlbGVtZXRyeS9kaXN0L2VzbS9zaG91bGQtZGlzYWJsZS10cmFja2luZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS90ZWxlbWV0cnkvZGlzdC9lc20vdXRpbHMvc3RvcmFnZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS90ZWxlbWV0cnkvZGlzdC9lc20vdXRpbHMvaW5qZWN0LXNjcmlwdC1lbGVtZW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL3RlbGVtZXRyeS9kaXN0L2VzbS91dGlscy9jcmVhdGUtc2NyaXB0LXRhZ3MuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGVzcmkvdGVsZW1ldHJ5L2Rpc3QvZXNtL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGVzcmkvdGVsZW1ldHJ5LWdvb2dsZS1hbmFseXRpY3MvZGlzdC9lc20vaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGVzcmkvdGVsZW1ldHJ5LWFtYXpvbi9kaXN0L2VzbS9hdXRoLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL3RlbGVtZXRyeS1hbWF6b24vZGlzdC9lc20vZm9ybWF0LXRlbGVtZXRyeS1hdHRyaWJ1dGVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL3RlbGVtZXRyeS1hbWF6b24vZGlzdC9lc20vZm9ybWF0LXRlbGVtZXRyeS1tZXRyaWNzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL3RlbGVtZXRyeS1hbWF6b24vZGlzdC9lc20vY3JlYXRlLWV2ZW50LWxvZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS90ZWxlbWV0cnktYW1hem9uL2Rpc3QvZXNtL2NyZWF0ZS1wYWdlLXZpZXctbG9nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rsdi9kaXN0L2Rsdi5lcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL3R5cGUtdXRpbHMvZGlzdC9hbmFseXRpY3MtdXRpbC10eXBlcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYW5hbHl0aWNzLXV0aWxzL2Rpc3QvYW5hbHl0aWNzLXV0aWxzLm1vZHVsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL2dsb2JhbC1zdG9yYWdlLXV0aWxzL2Rpc3QvYW5hbHl0aWNzLXV0aWwtZ2xvYmFsLXN0b3JhZ2UubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BhbmFseXRpY3MvY29yZS9ub2RlX21vZHVsZXMvQGFuYWx5dGljcy90eXBlLXV0aWxzL2Rpc3QvYW5hbHl0aWNzLXV0aWwtdHlwZXMubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BhbmFseXRpY3MvY29yZS9saWIvYW5hbHl0aWNzLmJyb3dzZXIuZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGFuYWx5dGljcy9jb29raWUtdXRpbHMvZGlzdC9hbmFseXRpY3MtdXRpbC1jb29raWUubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BhbmFseXRpY3MvbG9jYWxzdG9yYWdlLXV0aWxzL2Rpc3QvYW5hbHl0aWNzLXV0aWwtbG9jYWxzdG9yYWdlLm1vZHVsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL3N0b3JhZ2UtdXRpbHMvbm9kZV9tb2R1bGVzL0BhbmFseXRpY3Mvc2Vzc2lvbi1zdG9yYWdlLXV0aWxzL2Rpc3QvYW5hbHl0aWNzLXV0aWwtc2Vzc2lvbi1zdG9yYWdlLm1vZHVsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL3N0b3JhZ2UtdXRpbHMvbm9kZV9tb2R1bGVzL0BhbmFseXRpY3MvdHlwZS11dGlscy9kaXN0L2FuYWx5dGljcy11dGlsLXR5cGVzLm1vZHVsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL3N0b3JhZ2UtdXRpbHMvZGlzdC9hbmFseXRpY3MtdXRpbC1zdG9yYWdlLm1vZHVsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9hbmFseXRpY3MvbGliL2FuYWx5dGljcy5icm93c2VyLmVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9PdmVybG9hZFlpZWxkLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcmVnZW5lcmF0b3JEZWZpbmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yQXN5bmNJdGVyYXRvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yQXN5bmNHZW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvckFzeW5jLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcmVnZW5lcmF0b3JLZXlzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcmVnZW5lcmF0b3JWYWx1ZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL3F1ZXVlLXV0aWxzL2Rpc3QvYW5hbHl0aWNzLXV0aWwtcXVldWUubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BhbmFseXRpY3Mvc2Vzc2lvbi1zdG9yYWdlLXV0aWxzL2Rpc3QvYW5hbHl0aWNzLXV0aWwtc2Vzc2lvbi1zdG9yYWdlLm1vZHVsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL3Nlc3Npb24tdXRpbHMvZGlzdC9hbmFseXRpY3MtdXRpbC1zZXNzaW9uLm1vZHVsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL2F3cy1waW5wb2ludC9ub2RlX21vZHVsZXMvQGFuYWx5dGljcy90eXBlLXV0aWxzL2Rpc3QvYW5hbHl0aWNzLXV0aWwtdHlwZXMubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlZXBtZXJnZS9kaXN0L2Nqcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9hd3M0ZmV0Y2gvZGlzdC9hd3M0ZmV0Y2guZXNtLm1qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL2xpc3RlbmVyLXV0aWxzL2Rpc3QvYW5hbHl0aWNzLXV0aWwtbGlzdGVuZXIubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2FuYWx5dGljcy1wbHVnaW4tdGFiLWV2ZW50cy9saWIvYW5hbHl0aWNzLXBsdWdpbi10YWItZXZlbnRzLmJyb3dzZXIuZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGFuYWx5dGljcy9hY3Rpdml0eS11dGlscy9kaXN0L2FuYWx5dGljcy11dGlsLWFjdGl2aXR5Lm1vZHVsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYW5hbHl0aWNzL2F3cy1waW5wb2ludC9saWIvYW5hbHl0aWNzLXBsdWdpbi1hd3MtcGlucG9pbnQuYnJvd3Nlci5lcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS9hcmNnaXMtcmVzdC1yZXF1ZXN0L2Rpc3QvZXNtL3V0aWxzL3Byb2Nlc3MtcGFyYW1zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL2FyY2dpcy1yZXN0LXJlcXVlc3QvZGlzdC9lc20vdXRpbHMvZW5jb2RlLXF1ZXJ5LXN0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS9hcmNnaXMtcmVzdC1mb3JtLWRhdGEvYnJvd3Nlci1wb255ZmlsbC5tanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGVzcmkvYXJjZ2lzLXJlc3QtcmVxdWVzdC9kaXN0L2VzbS91dGlscy9lbmNvZGUtZm9ybS1kYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL2FyY2dpcy1yZXN0LXJlcXVlc3QvZGlzdC9lc20vdXRpbHMvQXJjR0lTUmVxdWVzdEVycm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL2FyY2dpcy1yZXN0LXJlcXVlc3QvZGlzdC9lc20vcmVxdWVzdENvbmZpZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS9hcmNnaXMtcmVzdC1yZXF1ZXN0L2Rpc3QvZXNtL3V0aWxzL3NlbmROb0NvcnNSZXF1ZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL2FyY2dpcy1yZXN0LXJlcXVlc3QvZGlzdC9lc20vdXRpbHMvd2Fybi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS9hcmNnaXMtcmVzdC1mZXRjaC9icm93c2VyLXBvbnlmaWxsLm1qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS9hcmNnaXMtcmVzdC1yZXF1ZXN0L2Rpc3QvZXNtL3V0aWxzL2lzU2FtZU9yaWdpbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS9hcmNnaXMtcmVzdC1yZXF1ZXN0L2Rpc3QvZXNtL3JlcXVlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGVzcmkvYXJjZ2lzLXJlc3QtcmVxdWVzdC9kaXN0L2VzbS91dGlscy9jbGVhbi11cmwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGVzcmkvYXJjZ2lzLXJlc3QtcG9ydGFsL2Rpc3QvZXNtL3V0aWwvZ2V0LXBvcnRhbC11cmwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGVzcmkvYXJjZ2lzLXJlc3QtcG9ydGFsL2Rpc3QvZXNtL2l0ZW1zL2hlbHBlcnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGVzcmkvYXJjZ2lzLXJlc3QtcG9ydGFsL2Rpc3QvZXNtL2l0ZW1zL3VwZGF0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS9hcmNnaXMtcmVzdC1wb3J0YWwvZGlzdC9lc20vaXRlbXMvZ2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL3RlbGVtZXRyeS1hbWF6b24vZGlzdC9lc20vYnVpbGQtYWNjZXNzLXByb3BlcnRpZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGVzcmkvdGVsZW1ldHJ5LWFtYXpvbi9kaXN0L2VzbS9zZXQtcG9ydGFsLWl0ZW0tYWNjZXNzLXBlcm1pc3Npb25zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL3RlbGVtZXRyeS1hbWF6b24vZGlzdC9lc20vZ2V0LXBvcnRhbC1pdGVtLWFjY2Vzcy1wZXJtaXNzaW9ucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXNyaS90ZWxlbWV0cnktYW1hem9uL2Rpc3QvZXNtL2luZGV4LmpzIiwiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY29uc2VudC1tYW5hZ2VyL2NvbnNlbnQtbWFuYWdlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNob3VsZERpc2FibGVUcmFja2luZyhvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IGRpc2FibGVkLCBwb3J0YWwgfSA9IG9wdGlvbnM7XG4gICAgaWYgKGRpc2FibGVkIHx8IChwb3J0YWwgPT09IG51bGwgfHwgcG9ydGFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb3J0YWwuZXVlaUVuYWJsZWQpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFwb3J0YWwgfHwgaGFzRXVlaUVuYWJsZWRBbmRJc01lbWJlck9mT3JnKHBvcnRhbCkgfHwgaXNSZWdpc3RlcmVkVXNlcldpdGhvdXRPcmdJblVTQShwb3J0YWwpIHx8IGlzQW5vbnltb3VzVXNlckluVVNBKHBvcnRhbCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGhhc0V1ZWlFbmFibGVkQW5kSXNNZW1iZXJPZk9yZyhwb3J0YWwpIHtcbiAgICByZXR1cm4gcG9ydGFsLmV1ZWlFbmFibGVkICYmIHBvcnRhbC51c2VyICYmIHBvcnRhbC51c2VyLm9yZ0lkID09PSBwb3J0YWwuaWQ7XG59XG5mdW5jdGlvbiBpc1JlZ2lzdGVyZWRVc2VyV2l0aG91dE9yZ0luVVNBKHBvcnRhbCkge1xuICAgIHJldHVybiBwb3J0YWwudXNlciAmJiAhcG9ydGFsLnVzZXIub3JnSWQgJiYgcG9ydGFsLmlwQ250cnlDb2RlID09PSAnVVMnO1xufVxuZnVuY3Rpb24gaXNBbm9ueW1vdXNVc2VySW5VU0EocG9ydGFsKSB7XG4gICAgcmV0dXJuICFwb3J0YWwudXNlciAmJiBwb3J0YWwuaXBDbnRyeUNvZGUgPT09ICdVUyc7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaG91bGQtZGlzYWJsZS10cmFja2luZy5qcy5tYXAiLCJleHBvcnQgY29uc3Qgc3RvcmFnZSA9IHtcbiAgICBzdG9yYWdlOiB7fSxcbiAgICBtZW1vcnk6IHRydWUsXG4gICAgZ2V0KGtleSkge1xuICAgICAgICBsZXQgc3RvcmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RvcmVkID1cbiAgICAgICAgICAgICAgICAod2luZG93LmxvY2FsU3RvcmFnZSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHN0b3JlZCA9IHRoaXMuc3RvcmFnZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBTYWZhcmkgcHJpdmF0ZSBtb2RlIChzZXRJdGVtIGlzIG5vdCBhbGxvd2VkKVxuICAgICAgICBjb25zdCB2YWx1ZVRvU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWVUb1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tZW1vcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdzZXR0aW5nIGxvY2FsIHN0b3JhZ2UgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gaW4tbWVtb3J5IHN0b3JhZ2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbW9yeSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZWxldGUoa2V5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1lbW9yeSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NldHRpbmcgbG9jYWwgc3RvcmFnZSBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBpbi1tZW1vcnkgc3RvcmFnZScpO1xuICAgICAgICAgICAgICAgIHRoaXMubWVtb3J5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0b3JhZ2Vba2V5XTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RvcmFnZS5qcy5tYXAiLCJjb25zdCBFU1JJX1RFTEVNRVRSWV9EQVRBX0FUVFJJQlVURSA9ICdlc3JpLXRlbGVtZXRyeSc7XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U2NyaXB0RWxlbWVudEFzeW5jKGF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBvbmxvYWRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBhdHRyaWJ1dGVzLm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgIGF0dHJpYnV0ZXMub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gaW5qZWN0U2NyaXB0RWxlbWVudChhdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKCFzY3JpcHQgfHwgYXR0cmlidXRlcy5ib2R5KSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgc2NyaXB0IGlzIGFscmVhZHkgbG9hZGVkIG9yIGl0IGhhcyBhIGJvZHkgaW5zdGVhZCBvZiBhIHNyY1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9ubG9hZFByb21pc2U7XG59XG5mdW5jdGlvbiBzY3JpcHRFeGlzdHMoYXR0cmlidXRlcykge1xuICAgIGNvbnN0IHsgaWQsIGRhdGFBdHRyaWJ1dGUgfSA9IGF0dHJpYnV0ZXM7XG4gICAgcmV0dXJuICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIHx8ICEhZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtJHtFU1JJX1RFTEVNRVRSWV9EQVRBX0FUVFJJQlVURX09XCIke2RhdGFBdHRyaWJ1dGV9XCJdYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U2NyaXB0RWxlbWVudChhdHRyaWJ1dGVzKSB7XG4gICAgY29uc3QgeyBib2R5LCBzcmMsIGlkLCBkYXRhQXR0cmlidXRlLCBzZWN0aW9uID0gJ2JvZHknLCB0eXBlID0gJ3RleHQvamF2YXNjcmlwdCcsIGFzeW5jID0gZmFsc2UsIGRlZmVyID0gZmFsc2UsIG9ubG9hZCwgb25lcnJvciB9ID0gYXR0cmlidXRlcztcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFdpbmRvd1VuZGVmaW5lZEVycm9yKCdXaW5kb3cgaXMgdW5kZWZpbmVkOiBDYW5ub3QgYWRkIHNjcmlwdCBlbGVtZW50LicpO1xuICAgIH1cbiAgICBpZiAoc2NyaXB0RXhpc3RzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBzY3JpcHQgKCR7aWQgfHwgZGF0YUF0dHJpYnV0ZX0pIGlzIGFscmVhZHkgcHJlc2VudCwgc2tpcHBpbmdgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY3JpcHRFbGVtZW50ID0gY3JlYXRlU2NyaXB0RWxlbWVudFdpdGhBdHRyaWJ1dGVzKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGRhdGFBdHRyaWJ1dGUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGFzeW5jLFxuICAgICAgICBkZWZlcixcbiAgICAgICAgYm9keSxcbiAgICAgICAgc3JjLFxuICAgICAgICBvbmxvYWQsXG4gICAgICAgIG9uZXJyb3JcbiAgICB9KTtcbiAgICByZXR1cm4gc2VjdGlvbiA9PT0gJ2JvZHknXG4gICAgICAgID8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KVxuICAgICAgICA6IGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7XG59XG5leHBvcnQgY2xhc3MgV2luZG93VW5kZWZpbmVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG5mdW5jdGlvbiBjcmVhdGVTY3JpcHRFbGVtZW50V2l0aEF0dHJpYnV0ZXMoeyBpZCwgZGF0YUF0dHJpYnV0ZSwgdHlwZSwgYXN5bmMsIGRlZmVyLCBib2R5LCBzcmMsIG9ubG9hZCwgb25lcnJvciB9KSB7XG4gICAgY29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIGlmIChpZCkge1xuICAgICAgICBzY3JpcHRFbGVtZW50LmlkID0gaWQ7XG4gICAgfVxuICAgIGlmIChkYXRhQXR0cmlidXRlKSB7XG4gICAgICAgIHNjcmlwdEVsZW1lbnQuc2V0QXR0cmlidXRlKGBkYXRhLSR7RVNSSV9URUxFTUVUUllfREFUQV9BVFRSSUJVVEV9YCwgZGF0YUF0dHJpYnV0ZSk7XG4gICAgfVxuICAgIHNyYyAmJiAoc2NyaXB0RWxlbWVudC5zcmMgPSBzcmMpO1xuICAgIGJvZHkgJiYgKHNjcmlwdEVsZW1lbnQuaW5uZXJUZXh0ID0gYm9keSk7XG4gICAgc2NyaXB0RWxlbWVudC50eXBlID0gdHlwZTtcbiAgICBzY3JpcHRFbGVtZW50LmFzeW5jID0gYXN5bmM7XG4gICAgc2NyaXB0RWxlbWVudC5kZWZlciA9IGRlZmVyO1xuICAgIG9ubG9hZCAmJiAoc2NyaXB0RWxlbWVudC5vbmxvYWQgPSBvbmxvYWQpO1xuICAgIG9uZXJyb3IgJiYgKHNjcmlwdEVsZW1lbnQub25lcnJvciA9IG9uZXJyb3IpO1xuICAgIHJldHVybiBzY3JpcHRFbGVtZW50O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5qZWN0LXNjcmlwdC1lbGVtZW50LmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY3JpcHRUYWdzKHNjcmlwdHMpIHtcbiAgICByZXR1cm4gc2NyaXB0cy5tYXAoc2NyaXB0T2JqID0+IHtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBbXTtcbiAgICAgICAgWydzcmMnLCAnaWQnLCAnZGF0YUF0dHJpYnV0ZScsICd0eXBlJ10uZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgIGxldCBhdHRyTmFtZSA9IGF0dHI7XG4gICAgICAgICAgICBpZiAoYXR0ciA9PT0gJ2RhdGFBdHRyaWJ1dGUnKSB7XG4gICAgICAgICAgICAgICAgYXR0ck5hbWUgPSAnZGF0YS1lc3JpLXRlbGVtZXRyeSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NyaXB0T2JqW2F0dHJdKSB7XG4gICAgICAgICAgICAgICAgYXR0cnMucHVzaChgJHthdHRyTmFtZX09XCIke3NjcmlwdE9ialthdHRyXX1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgWydhc3luYycsICdkZWZlciddLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0T2JqW2F0dHJdKSB7XG4gICAgICAgICAgICAgICAgYXR0cnMucHVzaChgJHthdHRyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGA8c2NyaXB0ICR7YXR0cnMuam9pbignICcpfT4ke3NjcmlwdE9iai5ib2R5ID8gc2NyaXB0T2JqLmJvZHkgOiAnJ308L3NjcmlwdD5gO1xuICAgIH0pLmpvaW4oJycpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlLXNjcmlwdC10YWdzLmpzLm1hcCIsImltcG9ydCB7IHNob3VsZERpc2FibGVUcmFja2luZyB9IGZyb20gJy4vc2hvdWxkLWRpc2FibGUtdHJhY2tpbmcnO1xuaW1wb3J0IHsgc3RvcmFnZSB9IGZyb20gJy4vdXRpbHMvc3RvcmFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmNvbnN0IElOVEVSTkFMX09SR1MgPSBbXG4gICAgJ2VzcmkuY29tJyxcbiAgICAnZXNyaXVrLmNvbScsXG4gICAgJ2VzcmkuZGUnLFxuICAgICdlc3JpLmNhJyxcbiAgICAnZXNyaWZyYW5jZS5mcicsXG4gICAgJ2VzcmkubmwnLFxuICAgICdlc3JpLXBvcnR1Z2FsLnB0JyxcbiAgICAnZXNyaWJ1bGdhcmlhLmNvbScsXG4gICAgJ2VzcmkuZmknLFxuICAgICdlc3JpLmtyJyxcbiAgICAnZXNyaW1hbGF5c2lhLmNvbS5teScsXG4gICAgJ2VzcmkuZXMnLFxuICAgICdlc3JpYXVzdHJhbGlhLmNvbS5hdScsXG4gICAgJ2Vzcmktc291dGhhZnJpY2EuY29tJyxcbiAgICAnZXNyaS5jbCcsXG4gICAgJ2VzcmljaGluYS5jb20uY24nLFxuICAgICdlc3JpLmNvJyxcbiAgICAnZXNyaXR1cmtleS5jb20udHInLFxuICAgICdnZW9kYXRhLm5vJyxcbiAgICAnZXNyaWl0YWxpYS5pdCcsXG4gICAgJ2VzcmkucGwnLFxuXTtcbi8qKlxuICogVGVsZW1ldHJ5IGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBUZWxlbWV0cnkge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHRoaXMudHJhY2tlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5kZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG4gICAgICAgIHRoaXMuc3VwcHJlc3NEaXNhYmxlZFdhcm5pbmdzID0gb3B0aW9ucy5zdXBwcmVzc0Rpc2FibGVkV2FybmluZ3M7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBzaG91bGREaXNhYmxlVHJhY2tpbmcob3B0aW9ucyk7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gb3B0aW9ucy5sb2dnZXIgfHwgY29uc29sZTtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuc3VwcHJlc3NEaXNhYmxlZFdhcm5pbmdzKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKCdUZWxlbWV0cnkgRGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2VyID0gKChfYSA9IG9wdGlvbnMucG9ydGFsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudXNlcikgfHwgb3B0aW9ucy51c2VyO1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgdGhpcy5zZXRVc2VyKHVzZXIsIChfYyA9IChfYiA9IG9wdGlvbnMucG9ydGFsKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3Vic2NyaXB0aW9uSW5mbykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplVHJhY2tlcnMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0aWFsaXplVHJhY2tlcnMoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGx1Z2lucykge1xuICAgICAgICAgICAgdGhpcy50cmFja2Vycy5wdXNoKC4uLnRoaXMub3B0aW9ucy5wbHVnaW5zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudHJhY2tlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihuZXcgRXJyb3IoJ05vIHRyYWNrZXJzIGNvbmZpZ3VyZWQnKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0U2NyaXB0VGFncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhY2tlcnNcbiAgICAgICAgICAgIC5tYXAoKHRyYWNrZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cmFja2VyLmdldFNjcmlwdFRhZ3MgJiYgdHJhY2tlci5nZXRTY3JpcHRUYWdzKCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy50cmFja2Vycy5tYXAoKHRyYWNrZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cmFja2VyLmluaXQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICB9XG4gICAgc2V0VXNlcih1c2VyID0ge30sIG9yZ1R5cGUgPSAnUHVibGljJykge1xuICAgICAgICB1c2VyID0gdHlwZW9mIHVzZXIgPT09ICdzdHJpbmcnID8geyB1c2VybmFtZTogdXNlciB9IDogdXNlcjtcbiAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgdGhpcy51c2VyLmFjY291bnRUeXBlID0gb3JnVHlwZTtcbiAgICAgICAgbGV0IGludGVybmFsRG9tYWluO1xuICAgICAgICBpZiAodXNlci5lbWFpbCAmJiB1c2VyLmVtYWlsLnNwbGl0KSB7XG4gICAgICAgICAgICBjb25zdCBkb21haW4gPSB1c2VyLmVtYWlsLnNwbGl0KCdAJylbMV07XG4gICAgICAgICAgICBpbnRlcm5hbERvbWFpbiA9XG4gICAgICAgICAgICAgICAgSU5URVJOQUxfT1JHUy5maWx0ZXIoKG9yZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9tYWluID09PSBvcmc7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJuYWxEb21haW4gfHxcbiAgICAgICAgICAgIFsnSW4gSG91c2UnLCAnRGVtbyBhbmQgTWFya2V0aW5nJ10uaW5kZXhPZihvcmdUeXBlKSA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXIuaW50ZXJuYWxVc2VyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsb2dQYWdlVmlldyhwYWdlLCBldmVudCA9IHt9LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuc3VwcHJlc3NEaXNhYmxlZFdhcm5pbmdzKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKCdQYWdlIHZpZXcgd2FzIG5vdCBsb2dnZWQgYmVjYXVzZSB0ZWxlbWV0cnkgaXMgZGlzYWJsZWQuJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5hYmxlZFRyYWNrZXJzID0gdGhpcy50cmFja2Vycy5maWx0ZXIoKHsgZGlzYWJsZWQsIGhhc0Vycm9yIH0pID0+ICFkaXNhYmxlZCAmJiAhaGFzRXJyb3IpO1xuICAgICAgICBpZiAoIWVuYWJsZWRUcmFja2Vycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1BhZ2UgdmlldyB3YXMgbm90IGxvZ2dlZCBiZWNhdXNlIG5vIGVuYWJsZWQgdGVsZW1ldHJ5LXBsdWdpbnMgYXJlIHJlZ2lzdGVyZWQuJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMucHJlUHJvY2VzcyhldmVudCwgb3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKCdUcmFja2luZyBwYWdlIHZpZXcnLCBKU09OLnN0cmluZ2lmeShhdHRyaWJ1dGVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBlbmFibGVkVHJhY2tlcnMubWFwKCh0cmFja2VyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2tlci5sb2dQYWdlVmlldyhwYWdlLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsb2dFdmVudChldmVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkICYmICF0aGlzLnN1cHByZXNzRGlzYWJsZWRXYXJuaW5ncykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbygnRXZlbnQgd2FzIG5vdCBsb2dnZWQgYmVjYXVzZSB0ZWxlbWV0cnkgaXMgZGlzYWJsZWQuJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5hYmxlZFRyYWNrZXJzID0gdGhpcy50cmFja2Vycy5maWx0ZXIoKHsgZGlzYWJsZWQsIGhhc0Vycm9yIH0pID0+ICFkaXNhYmxlZCAmJiAhaGFzRXJyb3IpO1xuICAgICAgICBpZiAoIWVuYWJsZWRUcmFja2Vycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0V2ZW50IHdhcyBub3QgbG9nZ2VkIGJlY2F1c2Ugbm8gZW5hYmxlZCB0ZWxlbWV0cnktcGx1Z2lucyBhcmUgcmVnaXN0ZXJlZC4nKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudEF0dHJpYnV0ZXMgPSB0aGlzLnByZVByb2Nlc3MoZXZlbnQsIG9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbygnVHJhY2tpbmcgZXZlbnQnLCBKU09OLnN0cmluZ2lmeShldmVudEF0dHJpYnV0ZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IGVuYWJsZWRUcmFja2Vycy5tYXAoKHRyYWNrZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cmFja2VyLmxvZ0V2ZW50KGV2ZW50QXR0cmlidXRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbG9nRXJyb3IoZXZlbnQgPSB7fSkge1xuICAgICAgICBldmVudCA9IE9iamVjdC5hc3NpZ24oeyBldmVudFR5cGU6ICdlcnJvcicgfSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KGV2ZW50KTtcbiAgICB9XG4gICAgc3RhcnRXb3JrZmxvdyhuYW1lLCBhdHRyaWJ1dGVzID0ge30pIHtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3cgPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgc3RhcnQ6IERhdGUubm93KCksXG4gICAgICAgICAgICBzdGVwczogW10sXG4gICAgICAgICAgICB3b3JrZmxvd0lkOiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwMDAwMDAwMCkudG9TdHJpbmcoMTYpLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNhdmVXb3JrZmxvdyh3b3JrZmxvdyk7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93T2JqID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHN0ZXA6ICdzdGFydCcgfSwgYXR0cmlidXRlcyk7XG4gICAgICAgIHRoaXMubG9nV29ya2Zsb3cod29ya2Zsb3dPYmopO1xuICAgICAgICByZXR1cm4gd29ya2Zsb3c7XG4gICAgfVxuICAgIHN0ZXBXb3JrZmxvdyhuYW1lLCBzdGVwLCBhdHRyaWJ1dGVzID0ge30pIHtcbiAgICAgICAgLy9UT0RPOiBjaGVjayBpZiB0aGUgY2hlY2sgZm9yIGF0dHJpYnV0ZXMgYmVpbmcgYSBzdHJpbmcgaXMgdXNlZnVsIG9yIGNhbiBiZSByZW1vdmVkXG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSB0eXBlb2YgYXR0cmlidXRlcyA9PT0gJ3N0cmluZycgPyBhdHRyaWJ1dGVzIDogYXR0cmlidXRlcy5kZXRhaWxzO1xuICAgICAgICBjb25zdCB3b3JrZmxvd09iaiA9IE9iamVjdC5hc3NpZ24oeyBuYW1lLCBzdGVwLCBkZXRhaWxzIH0sIGF0dHJpYnV0ZXMpO1xuICAgICAgICB0aGlzLmxvZ1dvcmtmbG93KHdvcmtmbG93T2JqKTtcbiAgICB9XG4gICAgZW5kV29ya2Zsb3cobmFtZSwgYXR0cmlidXRlcyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93T2JqID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHN0ZXA6ICdmaW5pc2gnIH0sIGF0dHJpYnV0ZXMpO1xuICAgICAgICB0aGlzLmxvZ1dvcmtmbG93KHdvcmtmbG93T2JqKTtcbiAgICB9XG4gICAgY2FuY2VsV29ya2Zsb3cobmFtZSwgYXR0cmlidXRlcyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93T2JqID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHN0ZXA6ICdjYW5jZWwnIH0sIGF0dHJpYnV0ZXMpO1xuICAgICAgICB0aGlzLmxvZ1dvcmtmbG93KHdvcmtmbG93T2JqKTtcbiAgICB9XG4gICAgZ2V0V29ya2Zsb3cobmFtZSkge1xuICAgICAgICBjb25zdCB3b3JrZmxvdyA9IHN0b3JhZ2UuZ2V0KGBURUxFTUVUUlktV09SS0ZMT1c6JHtuYW1lfWApO1xuICAgICAgICAvLyBkbyBub3QgbGV0IG9sZCB3b3JrZmxvd3MgYmUgcmV0dXJuZWRcbiAgICAgICAgaWYgKHdvcmtmbG93KSB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZmxvd0FnZSA9IERhdGUubm93KCkgLSB3b3JrZmxvdy5zdGFydDtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSAzMCAqIDYwICogMTAwMDtcbiAgICAgICAgICAgIGlmICh3b3JrZmxvd0FnZSA8IHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2Zsb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVdvcmtmbG93KHdvcmtmbG93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzYXZlV29ya2Zsb3cod29ya2Zsb3cpIHtcbiAgICAgICAgc3RvcmFnZS5zZXQoYFRFTEVNRVRSWS1XT1JLRkxPVzoke3dvcmtmbG93Lm5hbWV9YCwgd29ya2Zsb3cpO1xuICAgIH1cbiAgICBkZWxldGVXb3JrZmxvdyh3b3JrZmxvdykge1xuICAgICAgICBzdG9yYWdlLmRlbGV0ZShgVEVMRU1FVFJZLVdPUktGTE9XOiR7d29ya2Zsb3cubmFtZX1gKTtcbiAgICB9XG4gICAgbG9nV29ya2Zsb3cob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8qXG4gICAgICAgIGNvbnN0IHdvcmtmbG93ID0ge1xuICAgICAgICAgIG5hbWU6ICdhZGQgbGF5ZXIgdG8gbWFwJyxcbiAgICAgICAgICBzdGVwOiAnc3RhcnQnLFxuICAgICAgICAgIGRldGFpbHM6ICdzb21lIGRldGFpbHMgYWJvdXQgdGhlIHN0ZXAnXG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgb3B0aW9ucyA9IHRoaXMucHJlUHJvY2VzcyhvcHRpb25zKTtcbiAgICAgICAgbGV0IHdvcmtmbG93ID0gdGhpcy5nZXRXb3JrZmxvdyhvcHRpb25zLm5hbWUpO1xuICAgICAgICBpZiAoIXdvcmtmbG93KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3cob3B0aW9ucy5uYW1lKTtcbiAgICAgICAgICAgIHdvcmtmbG93ID0gdGhpcy5nZXRXb3JrZmxvdyhvcHRpb25zLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtmbG93LnN0ZXBzLnB1c2gob3B0aW9ucy5zdGVwKTtcbiAgICAgICAgd29ya2Zsb3cuZHVyYXRpb24gPSAoRGF0ZS5ub3coKSAtIHdvcmtmbG93LnN0YXJ0KSAvIDEwMDA7XG4gICAgICAgIGlmIChbJ2NhbmNlbCcsICdmaW5pc2gnXS5pbmRleE9mKG9wdGlvbnMuc3RlcCkgPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVXb3JrZmxvdyh3b3JrZmxvdyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVXb3JrZmxvdyh3b3JrZmxvdyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhY2sgPSBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3dvcmtmbG93JyxcbiAgICAgICAgICAgIGNhdGVnb3J5OiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgICBhY3Rpb246IG9wdGlvbnMuc3RlcCxcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb25zLmRldGFpbHMsXG4gICAgICAgICAgICBkdXJhdGlvbjogd29ya2Zsb3cuZHVyYXRpb24sXG4gICAgICAgICAgICB3b3JrZmxvd0lkOiB3b3JrZmxvdy53b3JrZmxvd0lkLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCh0cmFjayk7XG4gICAgfVxuICAgIHByZVByb2Nlc3MoZXZlbnQgPSB7fSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGxldCB1c2VyTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICAgICAgdXNlck1ldGFkYXRhID0ge1xuICAgICAgICAgICAgICAgIHVzZXI6ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBvcmc6ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBsYXN0TG9naW46IHRoaXMudXNlci5sYXN0TG9naW4sXG4gICAgICAgICAgICAgICAgdXNlclNpbmNlOiB0aGlzLnVzZXIuY3JlYXRlZCxcbiAgICAgICAgICAgICAgICBpbnRlcm5hbFVzZXI6IHRoaXMudXNlci5pbnRlcm5hbFVzZXIgfHwgZmFsc2UsXG4gICAgICAgICAgICAgICAgYWNjb3VudFR5cGU6IHRoaXMudXNlci5hY2NvdW50VHlwZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQpLCB1c2VyTWV0YWRhdGEpKS5yZWR1Y2UobWFrZUV2ZW50UGF5bG9hZChvcHRpb25zLm9taXRDb21wbGV4RGF0YSwgdGhpcy5sb2dnZXIpLCB7fSk7XG4gICAgfVxuICAgIGRpc2FibGVUcmFja2VyKHRyYWNrZXJOYW1lKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IHRoaXMudHJhY2tlcnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IHRyYWNrZXJOYW1lKTtcbiAgICAgICAgaWYgKHRyYWNrZXIgJiYgIXRyYWNrZXIuaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHRyYWNrZXIuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgKF9hID0gdHJhY2tlci5kaXNhYmxlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0cmFja2VyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbmFibGVUcmFja2VyKHRyYWNrZXJOYW1lKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IHRoaXMudHJhY2tlcnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IHRyYWNrZXJOYW1lKTtcbiAgICAgICAgaWYgKHRyYWNrZXIgJiYgIXRyYWNrZXIuaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHRyYWNrZXIuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIChfYSA9IHRyYWNrZXIuZW5hYmxlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0cmFja2VyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIG1ha2VFdmVudFBheWxvYWQob21pdENvbXBsZXhEYXRhLCBsb2dnZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjYywgW2tleSwgdmFsXSkge1xuICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFsKSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIW9taXRDb21wbGV4RGF0YSkge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFlvdSBhcmUgdHJ5aW5nIHRvIGxvZyBhIG5vbi1wcmltaXRpdmUgdmFsdWUsICR7a2V5fToke0pTT04uc3RyaW5naWZ5KHZhbCl9LiBUaGlzIHdpbGwgZ2V0IGxvZ2dlZCBhcyBbb2JqZWN0IE9iamVjdF1gKTtcbiAgICAgICAgICAgIGFjY1trZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbCkge1xuICAgIGNvbnN0IHByaW1pdGl2ZXMgPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICd1bmRlZmluZWQnXTtcbiAgICByZXR1cm4gKHByaW1pdGl2ZXMuaW5jbHVkZXModHlwZW9mIHZhbCkgfHxcbiAgICAgICAgKHZhbCAmJiB0eXBlb2YgdmFsLnZhbHVlT2YoKSA9PT0gJ3N0cmluZycpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG52YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcbiAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIGFyID0gW107XG4gICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICByZXR1cm4gYXI7XG4gIH07XG4gIHJldHVybiBvd25LZXlzKG8pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBvd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uKHBhdGgsIHByZXNlcnZlSnN4KSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XG4gICAgICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gXCIuanN4XCIgOiBcIi5qc1wiIDogZCAmJiAoIWV4dCB8fCAhY20pID8gbSA6IChkICsgZXh0ICsgXCIuXCIgKyBjbS50b0xvd2VyQ2FzZSgpICsgXCJqc1wiKTtcbiAgICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19lc0RlY29yYXRlLFxuICBfX3J1bkluaXRpYWxpemVycyxcbiAgX19wcm9wS2V5LFxuICBfX3NldEZ1bmN0aW9uTmFtZSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG4gIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxufTtcbiIsImltcG9ydCB7IF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgY3JlYXRlU2NyaXB0VGFncywgV2luZG93VW5kZWZpbmVkRXJyb3IsIGluamVjdFNjcmlwdEVsZW1lbnRBc3luYyB9IGZyb20gJ0Blc3JpL3RlbGVtZXRyeSc7XG4vKipcbiAqIENsYXNzIHN1cHBvcnRpbmcgR29vZ2xlIEFuYWx5dGljcyA0XG4gKi9cbmV4cG9ydCBjbGFzcyBHb29nbGVBbmFseXRpY3Mge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLm5hbWUgPSAnZ29vZ2xlQW5hbHl0aWNzJztcbiAgICAgICAgdGhpcy5kaW1lbnNpb25zID0ge307XG4gICAgICAgIHRoaXMubWV0cmljcyA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgISgoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWVhc3VyZW1lbnRJZHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAvLyBicm93c2VyIGVudmlyb25tZW50XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0IGxlYXN0IG9uZSBtZWFzdXJlbWVudElkIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGluIHlvdXIgY29uZmlndXJhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIF9nZXRTY3JpcHRzKCkge1xuICAgICAgICBjb25zdCBtZWFzdXJlbWVudElkID0gdGhpcy5tZWFzdXJlbWVudElkcyA/IHRoaXMubWVhc3VyZW1lbnRJZHNbMF0gOiAnJztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhQXR0cmlidXRlOiAnZ29vZ2xlLWFuYWx5dGljcycsXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgc3JjOiBgaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RhZy9qcz9pZD0ke21lYXN1cmVtZW50SWR9YFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZ2V0U2NyaXB0VGFncygpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNjcmlwdFRhZ3ModGhpcy5fZ2V0U2NyaXB0cygpKTtcbiAgICB9XG4gICAgYXN5bmMgaW5pdCgpIHtcbiAgICAgICAgLy8gZm9yIHVzZSBpbiBhIGJyb3N3ZXIgZW52aXJvbm1lbnRcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgV2luZG93VW5kZWZpbmVkRXJyb3IoJ1dpbmRvdyBpcyB1bmRlZmluZWQ6IENhbm5vdCBhZGQgc2NyaXB0IGVsZW1lbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2FsbHMgX2dldFNjcmlwdHMoKSBhbmQgdGhlbiBpdGVyYXRlcyBvdmVyIHRoZSBhcnJheSBhbmQgYWRkcyBkb20gbm9kZXMgZm9yIGVhY2ggYW5kIHJlc29sdmVzIG9uY2UgYWxsIGhhdmUgbG9hZGVkLlxuICAgICAgICAvLyBpbmplY3RTY3JpcHRFbGVtZW50QXN5bmMgd2lsbCBjaGVjayBpZiBhIHNjcmlwdCB3aXRoIHRoZSBzcGVjaWZpZWQgaWQgYWxyZWFkeSBleGlzdHMgYW5kLCBpZiBzbywgZG8gbm90aGluZ1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9nZXRTY3JpcHRzKCkubWFwKHNjcmlwdE9iaiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaW5qZWN0U2NyaXB0RWxlbWVudEFzeW5jKHNjcmlwdE9iaik7XG4gICAgICAgIH0pKTtcbiAgICAgICAgLy8gcnVucyBzZWNvbmQgc2NyaXB0XG4gICAgICAgIHRoaXMuaW5qZWN0Q29uZmlnKCk7XG4gICAgfVxuICAgIC8vIHdlIGxvZyBwYWdlIHZpZXdzIG1hbnVhbGx5LCBldmVuIHRob3VnaCBnYTQgY2FuIGRvIHNvIGF1dG9tYXRpY2FsbHkgZm9yIHBhZ2VzIG5vd1xuICAgIGxvZ1BhZ2VWaWV3KHBhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBjbGVhbmVkT3B0aW9ucyA9IHRoaXMuYnVpbGRDdXN0b21QYXJhbXMob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHBhZ2VWaWV3T3B0aW9uc09iamVjdCA9IE9iamVjdC5hc3NpZ24oeyBwYWdlX3RpdGxlOiBwYWdlIHx8IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSB9LCBjbGVhbmVkT3B0aW9ucyk7XG4gICAgICAgIHdpbmRvdy5ndGFnKCdldmVudCcsICdwYWdlX3ZpZXcnLCBwYWdlVmlld09wdGlvbnNPYmplY3QpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbG9nRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgLy8gZXZlbnRUeXBlIGlzIG5hbWUgb2Ygb3VyIGV2ZW50XG4gICAgICAgIGxldCB7IGFjdGlvbiB9ID0gZXZlbnQsIGN1c3RvbVBhcmFtcyA9IF9fcmVzdChldmVudCwgW1wiYWN0aW9uXCJdKTtcbiAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gYWN0aW9uIHx8ICdvdGhlcic7XG4gICAgICAgIC8vIGlmIHVzaW5nIHRlbGVtZXRyeSB3cmFwcGVyLCBjdXN0b20gbWV0cmljcy9kaW1lbnNpb25zIGluIGN1c3RvbVBhcmFtczsgaWYgbm90LCBpbiBvcHRpb25zXG4gICAgICAgIGNvbnN0IGV2ZW50UGFyYW1zID0gdGhpcy5idWlsZEN1c3RvbVBhcmFtcyhjdXN0b21QYXJhbXMpO1xuICAgICAgICAvLyBzaG91bGQgaGF2ZSBjdXN0b20gbWV0cmljICYgZGltZW5zaW9uIGRhdGEgdGhhdCBsb29rcyBsaWtlXG4gICAgICAgIC8vIG1ldHJpY19uYW1lOiBtZXRyaWNfdmFsdWVcbiAgICAgICAgLy8gZGltZW5zaW9uX25hbWU6IGRpbWVuc2lvbl92YWx1ZVxuICAgICAgICB3aW5kb3cuZ3RhZygnZXZlbnQnLCBldmVudFR5cGUsIGV2ZW50UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm1lYXN1cmVtZW50SWRzKSB7XG4gICAgICAgICAgICB0aGlzLm1lYXN1cmVtZW50SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgICAgICAgIHdpbmRvd1tgZ2EtZGlzYWJsZS0ke2lkfWBdID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWVhc3VyZW1lbnRJZHMpIHtcbiAgICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgd2luZG93W2BnYS1kaXNhYmxlLSR7aWR9YF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBpbmplY3RzIGNvbmZpZ3MgZm9yIGVhY2ggbWVhc3VyZW1lbnQgaWQgXG4gICAgaW5qZWN0Q29uZmlnKCkge1xuICAgICAgICB3aW5kb3cuZGF0YUxheWVyID0gd2luZG93LmRhdGFMYXllciB8fCBbXTtcbiAgICAgICAgd2luZG93Lmd0YWcgPSBmdW5jdGlvbiAoKSB7IHdpbmRvdy5kYXRhTGF5ZXIucHVzaChhcmd1bWVudHMpOyB9O1xuICAgICAgICB3aW5kb3cuZ3RhZygnanMnLCBuZXcgRGF0ZSgpKTtcbiAgICAgICAgY29uc3QgY29uZmlnT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICdjdXN0b21fbWFwJzogdGhpcy5jcmVhdGVEaW1lbnNpb25zQW5kTWV0cmljc0N1c3RvbU1hcCh0aGlzLmRpbWVuc2lvbnMsIHRoaXMubWV0cmljcyksXG4gICAgICAgICAgICAnc2VuZF9wYWdlX3ZpZXcnOiBmYWxzZSxcbiAgICAgICAgICAgICdhbm9ueW1pemVfaXAnOiB0cnVlIC8vIGFub255bWl6ZSBpcCBmb3IgZWFjaCBldmVudC9wYWdlIHZpZXcgdHJhY2tlZFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1lYXN1cmVtZW50SWRzLmZvckVhY2gobWVhc3VyZW1lbnRJZCA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuZ3RhZygnY29uZmlnJywgbWVhc3VyZW1lbnRJZCwgY29uZmlnT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBidWlsZEN1c3RvbVBhcmFtcyhldmVudFBhcmFtcykge1xuICAgICAgICBsZXQgY2xlYW5lZEV2ZW50UGFyYW1zO1xuICAgICAgICBsZXQgeyBjYXRlZ29yeSwgbGFiZWwgfSA9IGV2ZW50UGFyYW1zO1xuICAgICAgICAvLyB2ZXJpZnkgdGhhdCBhbGwgYXJlIHZhbGlkIGN1c3RvbSBtZXRyaWNzL2RpbWVuc2lvbnNcbiAgICAgICAgY2xlYW5lZEV2ZW50UGFyYW1zID0gdGhpcy52ZXJpZnlDdXN0b21EaW1lbnNpb25BbmRNZXRyaWNzKGV2ZW50UGFyYW1zKTtcbiAgICAgICAgLy8gZ2EzIHN5bnRheCB1c2VzIGNhdGVnb3J5L2FjdGlvbi9sYWJlbCwgd2hpY2ggaGF2ZSBiZWVuIGNoYW5nZWRcbiAgICAgICAgLy8gdG8gZXZlbnRfY2F0ZWdvcnksIGV2ZW50X2FjdGlvbiwgYW5kIGV2ZW50X2xhYmVsIGluIGdhNFxuICAgICAgICBpZiAoY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIGNsZWFuZWRFdmVudFBhcmFtcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY2xlYW5lZEV2ZW50UGFyYW1zKSwgeyBldmVudF9jYXRlZ29yeTogY2F0ZWdvcnkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICBjbGVhbmVkRXZlbnRQYXJhbXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNsZWFuZWRFdmVudFBhcmFtcyksIHsgZXZlbnRfbGFiZWw6IGxhYmVsIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGVhbmVkRXZlbnRQYXJhbXM7XG4gICAgfVxuICAgIHZlcmlmeUN1c3RvbURpbWVuc2lvbkFuZE1ldHJpY3MoZXZlbnRQYXJhbXMpIHtcbiAgICAgICAgLy8gYWxsIHZhbGlkIG1ldHJpYyBuYW1lcyBhbmQgZGltZW5zaW9uIG5hbWVzXG4gICAgICAgIC8vIHNpbmNlIHdlIHN0b3JlIG1ldHJpY3MvZGltZW5zaW9ucyBhcyBkaW1lbnNpb248aW5kZXg+OiBkaW1lbnNpb25fbmFtZSwgd2Ugd2FudCB2YWx1ZXNcbiAgICAgICAgY29uc3QgbWV0cmljQW5kRGltZW5zaW9uc01hcCA9IHRoaXMuY3JlYXRlRGltZW5zaW9uc0FuZE1ldHJpY3NDdXN0b21NYXAodGhpcy5kaW1lbnNpb25zLCB0aGlzLm1ldHJpY3MpO1xuICAgICAgICBjb25zdCBtZXRyaWNBbmREaW1lbnNpb25OYW1lcyA9IE9iamVjdC52YWx1ZXMobWV0cmljQW5kRGltZW5zaW9uc01hcCk7XG4gICAgICAgIC8vIGdldCBhbGwga2V5cyAobmFtZSBvZiBtZXRyaWMvZGltZW5zaW9uKSwgXG4gICAgICAgIC8vIGZpbHRlciBvdXQgYW55IGtleXMgbm90IGluIHZhbGlkIG5hbWVzLCBcbiAgICAgICAgLy8gYW5kIHRoZW4gcmVjcmVhdGUgbmV3IG9iamVjdCB3aXRoIGZpbHRlcmVkIGtleXMgYW5kIHZhbHVlcyBvbmx5XG4gICAgICAgIGNvbnN0IGNsZWFuZWRFdmVudFBhcmFtcyA9IE9iamVjdC5rZXlzKGV2ZW50UGFyYW1zKVxuICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gbWV0cmljQW5kRGltZW5zaW9uTmFtZXMuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGN1ciwga2V5KSA9PiB7IHJldHVybiBPYmplY3QuYXNzaWduKGN1ciwgeyBba2V5XTogZXZlbnRQYXJhbXNba2V5XSB9KTsgfSwge30pO1xuICAgICAgICByZXR1cm4gY2xlYW5lZEV2ZW50UGFyYW1zO1xuICAgIH1cbiAgICBjcmVhdGVEaW1lbnNpb25zQW5kTWV0cmljc0N1c3RvbU1hcChkaW1lbnNpb25zID0ge30sIG1ldHJpY3MgPSB7fSkge1xuICAgICAgICBjb25zdCBtZXRyaWNzTWFwID0gdGhpcy5jcmVhdGVNZXRyaWNDdXN0b21NYXAobWV0cmljcyk7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnNNYXAgPSB0aGlzLmNyZWF0ZURpbWVuc2lvbkN1c3RvbU1hcChkaW1lbnNpb25zKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbWV0cmljc01hcCksIGRpbWVuc2lvbnNNYXApO1xuICAgIH1cbiAgICAvLyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IG91ciBtZXRyaWNzIGNvbWUgbGlrZSB7IHRpbWVNZXRyaWM6IDEsIG90aGVyTWV0cmljOiAzfSB3aGVyZSBtZXRyaWNfbmFtZTogaW5kZXhcbiAgICBjcmVhdGVNZXRyaWNDdXN0b21NYXAobWV0cmljcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhtZXRyaWNzKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8vIGZvcm1hdCBvZiBtZXRyaWM8SW5kZXg+OiBtZXRyaWNfbmFtZVxuICAgICAgICAgICAgICAgIGtleTogYG1ldHJpYyR7bWV0cmljc1trZXldfWAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGtleVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbCkgPT4gdmFsKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCB7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgLy8gdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBvdXIgZGltZW5zaW9ucyBjb21lIGxpa2UgeyBzb21lQXR0cmlidXRlOiA3LCBkYXRhc2V0SWQ6IDZ9IHdoZXJlIGRpbWVuc2lvbl9uYW1lOiBpbmRleFxuICAgIGNyZWF0ZURpbWVuc2lvbkN1c3RvbU1hcChkaW1lbnNpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGRpbWVuc2lvbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLy8gZm9ybWF0IG9mIGRpbWVuc2lvbjxJbmRleD46IGRpbWVuc2lvbl9uYW1lXG4gICAgICAgICAgICAgICAga2V5OiBgZGltZW5zaW9uJHtkaW1lbnNpb25zW2tleV19YCxcbiAgICAgICAgICAgICAgICB2YWx1ZToga2V5XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigodmFsKSA9PiB2YWwpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIHsga2V5LCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IHN0b3JhZ2UgfSBmcm9tICdAZXNyaS90ZWxlbWV0cnknO1xuY29uc3QgQ09HTklUT19LRVkgPSAnVEVMRU1FVFJZX0NPR05JVE9fQ1JFREVOVElBTFMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWRlbnRpYWxzKElkZW50aXR5UG9vbElkLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBmaXBzU3ViZG9tYWluU3VmZml4ID0gb3B0aW9ucy5maXBzID09PSB0cnVlID8gJy1maXBzJyA6ICcnO1xuICAgIGNvbnN0IENPR05JVE9fVVJMID0gYGh0dHBzOi8vY29nbml0by1pZGVudGl0eSR7Zmlwc1N1YmRvbWFpblN1ZmZpeH0udXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vYDtcbiAgICBsZXQgY2FjaGVkID0gc3RvcmFnZS5nZXQoQ09HTklUT19LRVkpO1xuICAgIGlmIChjYWNoZWQgJiYgRGF0ZS5ub3coKSAvIDEwMDAgPCBjYWNoZWQuRXhwaXJhdGlvbilcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjYWNoZWQpO1xuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC1hbXotanNvbi0xLjEnLFxuICAgICAgICAgICAgJ1gtQW16LVRhcmdldCc6ICdBV1NDb2duaXRvSWRlbnRpdHlTZXJ2aWNlLkdldElkJyxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBJZGVudGl0eVBvb2xJZCB9KSxcbiAgICB9O1xuICAgIHJldHVybiBmZXRjaChDT0dOSVRPX1VSTCwgZmV0Y2hPcHRpb25zKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgSWRlbnRpdHlJZCB9ID0gcmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtYW16LWpzb24tMS4xJyxcbiAgICAgICAgICAgICAgICAnWC1BbXotVGFyZ2V0JzogJ0FXU0NvZ25pdG9JZGVudGl0eVNlcnZpY2UuR2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBJZGVudGl0eUlkIH0pLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmV0Y2goQ09HTklUT19VUkwsIG9wdGlvbnMpO1xuICAgIH0pXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9KVxuICAgICAgICAudGhlbigoeyBDcmVkZW50aWFscyB9KSA9PiB7XG4gICAgICAgIHN0b3JhZ2Uuc2V0KENPR05JVE9fS0VZLCBDcmVkZW50aWFscyk7XG4gICAgICAgIHJldHVybiBDcmVkZW50aWFscztcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1dGguanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRlbGVtZXRyeUF0dHJpYnV0ZXMoeyB0ZWxlbWV0cnlEYXRhLCBkaW1lbnNpb25Mb29rdXAgPSB7fSwgZXhjbHVkZUtleXMgPSBbXSwgfSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0ZWxlbWV0cnlEYXRhKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuICFleGNsdWRlS2V5cy5pbmNsdWRlcyhrZXkpO1xuICAgIH0pXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICBpZiAoZGltZW5zaW9uTG9va3VwW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2V5OiBnZXRDdXN0b21EaW1lbnNpb25LZXkoZGltZW5zaW9uTG9va3VwLCBrZXkpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0ZWxlbWV0cnlEYXRhW2tleV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZTogZ2V0VmFsdWUodGVsZW1ldHJ5RGF0YSwga2V5KSxcbiAgICAgICAgfTtcbiAgICB9KVxuICAgICAgICAucmVkdWNlKChhY2MsIHsga2V5LCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWUoZGF0YSwga2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ2pzb24nKSB7XG4gICAgICAgIHJldHVybiBkYXRhW2tleV0gPyBKU09OLnN0cmluZ2lmeShkYXRhW2tleV0pIDogJ251bGwnO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YVtrZXldID09PSB1bmRlZmluZWQgPyAnbnVsbCcgOiBkYXRhW2tleV0udG9TdHJpbmcoKTtcbn1cbmZ1bmN0aW9uIGdldEN1c3RvbURpbWVuc2lvbktleShsb29rdXAsIGtleSkge1xuICAgIHJldHVybiBgZGltZW5zaW9uJHtsb29rdXBba2V5XX1gO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0LXRlbGVtZXRyeS1hdHRyaWJ1dGVzLmpzLm1hcCIsImNvbnN0IE1FVFJJQ1MgPSBbJ3NpemUnLCAnZHVyYXRpb24nLCAncG9zaXRpb24nLCAnbnVtYmVyJywgJ2NvdW50J107XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGVsZW1ldHJ5TWV0cmljcyh0ZWxlbWV0cnlEYXRhLCBtZXRyaWNMb29rdXAgPSB7fSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0ZWxlbWV0cnlEYXRhKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIG1ldHJpY0xvb2t1cFtrZXldIHx8IE1FVFJJQ1MuaW5jbHVkZXMoa2V5KTtcbiAgICB9KVxuICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgaWYgKG1ldHJpY0xvb2t1cFtrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleTogZ2V0Q3VzdG9tTWV0cmljS2V5KG1ldHJpY0xvb2t1cCwga2V5KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGVsZW1ldHJ5RGF0YVtrZXldLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRlbGVtZXRyeURhdGFba2V5XSxcbiAgICAgICAgfTtcbiAgICB9KVxuICAgICAgICAucmVkdWNlKChhY2MsIHsga2V5LCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tTWV0cmljS2V5KGxvb2t1cCwga2V5KSB7XG4gICAgcmV0dXJuIGBtZXRyaWMke2xvb2t1cFtrZXldfWA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtYXQtdGVsZW1ldHJ5LW1ldHJpY3MuanMubWFwIiwiaW1wb3J0IHsgZm9ybWF0VGVsZW1ldHJ5QXR0cmlidXRlcyB9IGZyb20gJy4vZm9ybWF0LXRlbGVtZXRyeS1hdHRyaWJ1dGVzJztcbmltcG9ydCB7IGZvcm1hdFRlbGVtZXRyeU1ldHJpY3MgfSBmcm9tICcuL2Zvcm1hdC10ZWxlbWV0cnktbWV0cmljcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXZlbnRMb2coeyBldmVudCA9IHt9LCBkaW1lbnNpb25Mb29rdXAgPSB7fSwgbWV0cmljTG9va3VwID0ge30sIH0pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgcGF0aG5hbWU6IGV2ZW50UGF0aG5hbWUsIGV2ZW50VHlwZSA9ICdvdGhlcicgfSA9IGV2ZW50O1xuICAgIGNvbnN0IG1ldHJpY3MgPSBmb3JtYXRUZWxlbWV0cnlNZXRyaWNzKGV2ZW50LCBtZXRyaWNMb29rdXApO1xuICAgIGNvbnN0IGV2ZW50QXR0cmlidXRlcyA9IGZvcm1hdFRlbGVtZXRyeUF0dHJpYnV0ZXMoe1xuICAgICAgICB0ZWxlbWV0cnlEYXRhOiBPYmplY3QuYXNzaWduKHsgZXZlbnRUeXBlIH0sIGV2ZW50KSxcbiAgICAgICAgZGltZW5zaW9uTG9va3VwLFxuICAgICAgICBleGNsdWRlS2V5czogW1xuICAgICAgICAgICAgJ3dvcmtmbG93JyxcbiAgICAgICAgICAgICdwYXRobmFtZScsXG4gICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhtZXRyaWNzKSxcbiAgICAgICAgICAgIC4uLk9iamVjdC5rZXlzKG1ldHJpY0xvb2t1cCksXG4gICAgICAgIF0sXG4gICAgfSk7XG4gICAgY29uc3QgdGVsZW1ldHJ5UGF5bG9hZCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IG5hbWU6IGV2ZW50VHlwZSB9LCBldmVudEF0dHJpYnV0ZXMpLCBtZXRyaWNzKTtcbiAgICAvLyBTZXQgYnJvd3NlciBwcm9wZXJ0aWVzIGlmIGF2YWlsYWJsZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LnJlZmVycmVyKSB7XG4gICAgICAgIHRlbGVtZXRyeVBheWxvYWQucmVmZXJyZXIgPSBkb2N1bWVudC5yZWZlcnJlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICF0ZWxlbWV0cnlQYXlsb2FkLmhvc3RuYW1lKSB7XG4gICAgICAgIHRlbGVtZXRyeVBheWxvYWQuaG9zdG5hbWUgPSAoX2EgPSB3aW5kb3cubG9jYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ob3N0bmFtZTtcbiAgICB9XG4gICAgdGVsZW1ldHJ5UGF5bG9hZC5wYXRoID1cbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lXG4gICAgICAgICAgICA/IChfYiA9IHdpbmRvdy5sb2NhdGlvbikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhdGhuYW1lXG4gICAgICAgICAgICA6IGV2ZW50UGF0aG5hbWU7XG4gICAgcmV0dXJuIHRlbGVtZXRyeVBheWxvYWQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGUtZXZlbnQtbG9nLmpzLm1hcCIsImltcG9ydCB7IGZvcm1hdFRlbGVtZXRyeUF0dHJpYnV0ZXMgfSBmcm9tICcuL2Zvcm1hdC10ZWxlbWV0cnktYXR0cmlidXRlcyc7XG5pbXBvcnQgeyBmb3JtYXRUZWxlbWV0cnlNZXRyaWNzIH0gZnJvbSAnLi9mb3JtYXQtdGVsZW1ldHJ5LW1ldHJpY3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhZ2VWaWV3TG9nKHsgcGFnZSwgcHJldmlvdXNQYWdlID0ge30sIG9wdGlvbnMgPSB7fSwgZGltZW5zaW9uTG9va3VwID0ge30sIG1ldHJpY0xvb2t1cCA9IHt9LCB9KSB7XG4gICAgY29uc3QgbWV0cmljcyA9IGZvcm1hdFRlbGVtZXRyeU1ldHJpY3Mob3B0aW9ucywgbWV0cmljTG9va3VwKTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gZm9ybWF0VGVsZW1ldHJ5QXR0cmlidXRlcyh7XG4gICAgICAgIHRlbGVtZXRyeURhdGE6IG9wdGlvbnMsXG4gICAgICAgIGRpbWVuc2lvbkxvb2t1cCxcbiAgICAgICAgZXhjbHVkZUtleXM6IFtcbiAgICAgICAgICAgICd3b3JrZmxvdycsXG4gICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhtZXRyaWNzKSxcbiAgICAgICAgICAgIC4uLk9iamVjdC5rZXlzKG1ldHJpY0xvb2t1cCksXG4gICAgICAgIF0sXG4gICAgfSk7XG4gICAgY29uc3QgeyByZWZlcnJlciwgdGl0bGUgfSA9IGRvY3VtZW50IHx8IHt9O1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lIH0gPSB3aW5kb3cgJiYgd2luZG93LmxvY2F0aW9uID8gd2luZG93LmxvY2F0aW9uIDoge307XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IG5hbWU6ICdwYWdlVmlldycsIHJlZmVycmVyLFxuICAgICAgICBob3N0bmFtZSwgcGF0aDogcGFnZSB8fCBwYXRobmFtZSwgcGFnZVVybDogcGFnZSB8fCBwYXRobmFtZSwgcGFnZU5hbWU6IHRpdGxlLCBwcmV2aW91c1BhZ2VVcmw6IHByZXZpb3VzUGFnZS5wYWdlVXJsLCBwcmV2aW91c1BhZ2VOYW1lOiBwcmV2aW91c1BhZ2UucGFnZU5hbWUgfSwgYXR0cmlidXRlcyksIG1ldHJpY3MpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlLXBhZ2Utdmlldy1sb2cuanMubWFwIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCxlLGwsbixyKXtmb3IoZT1lLnNwbGl0P2Uuc3BsaXQoXCIuXCIpOmUsbj0wO248ZS5sZW5ndGg7bisrKXQ9dD90W2Vbbl1dOnI7cmV0dXJuIHQ9PT1yP2w6dH1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRsdi5lcy5qcy5tYXBcbiIsInZhciBuPVwiZnVuY3Rpb25cIix0PVwic3RyaW5nXCIsZT1cInVuZGVmaW5lZFwiLHI9XCJib29sZWFuXCIsbz1cIm9iamVjdFwiLHU9XCJhcnJheVwiLGM9XCJudW1iZXJcIixpPVwic3ltYm9sXCIsYT1cIm51bGxcIixmPVwiZXJyb3JcIixzPVwidHlwZUVycm9yXCIsbD1cInN5bnRheEVycm9yXCIscD1cImFzeW5jRnVuY3Rpb25cIixkPVwiZ2VuZXJhdG9yRnVuY3Rpb25cIix5PVwiYXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiLGc9ZnVuY3Rpb24oKXt9LG09XCJhbnlcIix2PVwiKlwiLGI9XCJub25lXCIsaD1cImhpZGRlblwiLE89XCJfX1wiLFM9XCJmb3JtXCIsaj1cImlucHV0XCIsQT1cImJ1dHRvblwiLEU9XCJzZWxlY3RcIixOPVwiY2hhbmdlXCIsdz1cInN1Ym1pdFwiLEQ9L15cXGR7NH0tWzAxXVxcZC1bMC0zXVxcZFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZFxcLlxcZCsoWystXVswLTJdXFxkOlswLTVdXFxkfFopJC8sej0vXlthLXpBLVowLTkuISMkJSYnKitcXC89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxaPS9eXFx7W1xcc1xcU10qXFx9JHxeXFxbW1xcc1xcU10qXFxdJC8sUD10eXBlb2YgcHJvY2VzcyE9PWU/cHJvY2Vzczp7fSx4PVAuZW52JiZQLmVudi5OT0RFX0VOVnx8XCJcIixDPVwicHJvZHVjdGlvblwiPT09eCxGPVwic3RhZ2luZ1wiPT09eCxMPVwiZGV2ZWxvcG1lbnRcIj09PXgsJD10eXBlb2YgZG9jdW1lbnQhPT1lLFQ9JCYmXCJsb2NhbGhvc3RcIj09PXdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxfPW51bGwhPVAudmVyc2lvbnMmJm51bGwhPVAudmVyc2lvbnMubm9kZSxrPXR5cGVvZiBEZW5vIT09ZSYmdHlwZW9mIERlbm8uY29yZSE9PWUsQj10eXBlb2Ygc2VsZj09PW8mJnNlbGYuY29uc3RydWN0b3ImJlwiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVcIj09PXNlbGYuY29uc3RydWN0b3IubmFtZSxHPSQmJlwibm9kZWpzXCI9PT13aW5kb3cubmFtZXx8dHlwZW9mIG5hdmlnYXRvciE9PWUmJnR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50IT09ZSYmKG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJOb2RlLmpzXCIpfHxuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKFwianNkb21cIikpO2Z1bmN0aW9uIE0obix0KXtyZXR1cm4gdC5jaGFyQXQoMClbbl0oKSt0LnNsaWNlKDEpfXZhciBVPU0uYmluZChudWxsLFwidG9VcHBlckNhc2VcIiksSD1NLmJpbmQobnVsbCxcInRvTG93ZXJDYXNlXCIpO2Z1bmN0aW9uIEoobil7cmV0dXJuIFkobik/VShhKTp0eXBlb2Ygbj09PW8/eW4obik6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pLnNsaWNlKDgsLTEpfWZ1bmN0aW9uIFIobix0KXt2b2lkIDA9PT10JiYodD0hMCk7dmFyIGU9SihuKTtyZXR1cm4gdD9IKGUpOmV9ZnVuY3Rpb24gVihuLHQpe3JldHVybiB0eXBlb2YgdD09PW59dmFyIFc9Vi5iaW5kKG51bGwsbikscT1WLmJpbmQobnVsbCx0KSxJPVYuYmluZChudWxsLGUpO2Z1bmN0aW9uIEsobil7cmV0dXJuIUkobil9dmFyIFE9Vi5iaW5kKG51bGwsciksWD1WLmJpbmQobnVsbCxpKTtmdW5jdGlvbiBZKG4pe3JldHVybiBudWxsPT09bn1mdW5jdGlvbiBubihuKXtyZXR1cm4gUihuKT09PWMmJiFpc05hTihuKX1mdW5jdGlvbiB0bihuKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChuKSl9ZnVuY3Rpb24gZW4obil7cmV0dXJuISFXKG4pJiYvXmNsYXNzIC8udGVzdChGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSl9ZnVuY3Rpb24gcm4obil7cmV0dXJuIFIobik9PT11fWZ1bmN0aW9uIG9uKG4pe2lmKCF1bihuKSlyZXR1cm4hMTtmb3IodmFyIHQ9bjtudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyl0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KTtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pPT09dH1mdW5jdGlvbiB1bihuKXtyZXR1cm4gbiYmKHR5cGVvZiBuPT09b3x8bnVsbCE9PW4pfWZ1bmN0aW9uIGNuKG4pe2lmKCFxKG4pfHwhWi50ZXN0KG4pKXJldHVybiExO3RyeXtKU09OLnBhcnNlKG4pfWNhdGNoKG4pe3JldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGFuKG4pe2lmKFkobikpcmV0dXJuITA7c3dpdGNoKHR5cGVvZiBuKXtjYXNlIHQ6Y2FzZSBjOmNhc2UgaTpjYXNlIGU6Y2FzZSByOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGZuKG4sdCl7cmV0dXJuIG9uKG4pJiZXKG5bdF0pfWZ1bmN0aW9uIHNuKG4pe3JldHVybiEhbiYmISEoIUkoUHJvbWlzZSkmJm4gaW5zdGFuY2VvZiBQcm9taXNlfHxuLnRoZW4mJlcobi50aGVuKSl9ZnVuY3Rpb24gbG4obil7cmV0dXJuIHVuKG4pJiZXKG4udGhyb3cpJiZXKG4ucmV0dXJuKSYmVyhuLm5leHQpfWZ1bmN0aW9uIHBuKG4pe3JldHVybiBSKG4pPT09ZH1mdW5jdGlvbiBkbihuKXtyZXR1cm4gUihuKT09PXB9ZnVuY3Rpb24geW4obil7cmV0dXJuIFcobi5jb25zdHJ1Y3Rvcik/bi5jb25zdHJ1Y3Rvci5uYW1lOm51bGx9ZnVuY3Rpb24gZ24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBTZXR9ZnVuY3Rpb24gbW4obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBNYXB9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHB9ZnVuY3Rpb24gYm4obil7cmV0dXJuISghbi5jb25zdHJ1Y3Rvcnx8IVcobi5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikpJiZuLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG4pfWZ1bmN0aW9uIGhuKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRXJyb3J8fHEobi5tZXNzYWdlKSYmbi5jb25zdHJ1Y3RvciYmbm4obi5jb25zdHJ1Y3Rvci5zdGFja1RyYWNlTGltaXQpfWZ1bmN0aW9uIE9uKG4pe3JldHVybiB1bihuKSYmcShuLm1lc3NhZ2UpJiZxKG4ubmFtZSl9ZnVuY3Rpb24gU24obix0KXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8WSh0KSlyZXR1cm4hMTtpZih0IGluc3RhbmNlb2YgbilyZXR1cm4hMDt2YXIgZT1SKG5ldyBuKFwiXCIpKTtpZihobih0KSlmb3IoO3Q7KXtpZihSKHQpPT09ZSlyZXR1cm4hMDt0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KX1yZXR1cm4hMX12YXIgam49U24uYmluZChudWxsLFR5cGVFcnJvciksQW49U24uYmluZChudWxsLFN5bnRheEVycm9yKTtmdW5jdGlvbiBFbihuKXtpZighVyhuKSlyZXR1cm4hMTt2YXIgdD0veyhcXHJ8XFxufFxccykqfS9nbSxlPWcrXCJcIjtyZXR1cm4gZT09PShuLnRvU3RyaW5nKCkubWF0Y2godCl8fFtcIlwiXSlbMF0ucmVwbGFjZSh0LGUpfWZ1bmN0aW9uIE5uKG4pe3RyeXtpZihubihuLmxlbmd0aCkmJlcobi5jYWxsZWUpKXJldHVybiEwfWNhdGNoKG4pe2lmKC0xIT09bi5tZXNzYWdlLmluZGV4T2YoXCJjYWxsZWVcIikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gd24obil7cmV0dXJuIShxKG4pJiZcImZhbHNlXCI9PT1uLnRvTG93ZXJDYXNlKCl8fCFuKX1mdW5jdGlvbiBEbihuKXtyZXR1cm4hbn1mdW5jdGlvbiB6bihuKXtyZXR1cm4hMD09PW59ZnVuY3Rpb24gWm4obil7cmV0dXJuITE9PT1ufWZ1bmN0aW9uIFBuKG4pe3JldHVybiEobi5sZW5ndGg+MzIwKSYmei50ZXN0KG4pfWZ1bmN0aW9uIHhuKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZXx8VyhuLnRvRGF0ZVN0cmluZykmJlcobi5nZXREYXRlKSYmVyhuLnNldERhdGUpfWZ1bmN0aW9uIENuKG4pe3JldHVybiBELnRlc3Qobil9ZnVuY3Rpb24gRm4obil7cmV0dXJuISghWShuKSYmKHJuKG4pP24ubGVuZ3RoOmduKG4pfHxtbihuKT9uLnNpemU6b24obikmJk9iamVjdC5rZXlzKG4pLmxlbmd0aCkpfWZ1bmN0aW9uIExuKG4pe3JldHVybiBOb2RlTGlzdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihuKX1mdW5jdGlvbiAkbihuLHQpe3ZhciBlPW4gaW5zdGFuY2VvZiBFbGVtZW50fHxuIGluc3RhbmNlb2YgSFRNTERvY3VtZW50O3JldHVybiBlJiZ0P1RuKG4sdCk6ZX1mdW5jdGlvbiBUbihuLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cIlwiKSxuJiZuLm5vZGVOYW1lPT09dC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIF9uKG4pe3ZhciB0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KHZvaWQgMCxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykuY29uY2F0KHQpKX19dmFyIGtuPV9uKCRuLFMpLEJuPV9uKCRuLEEpLEduPV9uKCRuLGopLE1uPV9uKCRuLEUpO2Z1bmN0aW9uIFVuKG4sdCl7aWYoIW58fGdldENvbXB1dGVkU3R5bGUobikudmlzaWJpbGl0eT09PWgpcmV0dXJuITA7Zm9yKDtuOyl7aWYobnVsbCE9dCYmbj09PXQpcmV0dXJuITE7aWYoZ2V0Q29tcHV0ZWRTdHlsZShuKS5kaXNwbGF5PT09YilyZXR1cm4hMDtuPW4ucGFyZW50RWxlbWVudH1yZXR1cm4hMX1mdW5jdGlvbiBIbihuKXtyZXR1cm4gbj9ybihuKT9uOltuXTpbXX1leHBvcnR7diBhcyBBTEwsbSBhcyBBTlksdSBhcyBBUlJBWSxwIGFzIEFTWU5DX0ZVTkNUSU9OLHkgYXMgQVNZTkNfR0VORVJBVE9SX0ZVTkNUSU9OLHIgYXMgQk9PTEVBTixBIGFzIEJVVFRPTixOIGFzIENIQU5HRSx4IGFzIEVOVixmIGFzIEVSUk9SLFMgYXMgRk9STSxuIGFzIEZVTkNUSU9OLGQgYXMgR0VORVJBVE9SX0ZVTkNUSU9OLGggYXMgSElEREVOLGogYXMgSU5QVVQsYiBhcyBOT05FLGEgYXMgTlVMTCxjIGFzIE5VTUJFUixvIGFzIE9CSkVDVCxPIGFzIFBSRUZJWCx6IGFzIFJFR0VYX0VNQUlMLEQgYXMgUkVHRVhfSVNPLFogYXMgUkVHRVhfSlNPTixFIGFzIFNFTEVDVCx0IGFzIFNUUklORyx3IGFzIFNVQk1JVCxpIGFzIFNZTUJPTCxsIGFzIFNZTlRBWF9FUlJPUixzIGFzIFRZUEVfRVJST1IsZSBhcyBVTkRFRklORUQseW4gYXMgY3Rvck5hbWUsSG4gYXMgZW5zdXJlQXJyYXksUiBhcyBnZXRUeXBlLEogYXMgZ2V0VHlwZU5hbWUsTm4gYXMgaXNBcmd1bWVudHMscm4gYXMgaXNBcnJheSxkbiBhcyBpc0FzeW5jRnVuY3Rpb24sUSBhcyBpc0Jvb2xlYW4sJCBhcyBpc0Jyb3dzZXIsYm4gYXMgaXNCdWZmZXIsQm4gYXMgaXNCdXR0b24sZW4gYXMgaXNDbGFzcyx4biBhcyBpc0RhdGUsSyBhcyBpc0RlZmluZWQsayBhcyBpc0Rlbm8sTCBhcyBpc0RldiwkbiBhcyBpc0VsZW1lbnQsUG4gYXMgaXNFbWFpbCxGbiBhcyBpc0VtcHR5LGhuIGFzIGlzRXJyb3IsT24gYXMgaXNFcnJvckxpa2UsWm4gYXMgaXNGYWxzZSxEbiBhcyBpc0ZhbHN5LGtuIGFzIGlzRm9ybSxXIGFzIGlzRnVuY3Rpb24sbG4gYXMgaXNHZW5lcmF0b3IscG4gYXMgaXNHZW5lcmF0b3JGdW5jdGlvbixVbiBhcyBpc0hpZGRlbixHbiBhcyBpc0lucHV0LENuIGFzIGlzSXNvRGF0ZSxHIGFzIGlzSnNEb20sY24gYXMgaXNKc29uLFQgYXMgaXNMb2NhbEhvc3QsbW4gYXMgaXNNYXAsZm4gYXMgaXNNZXRob2QsRW4gYXMgaXNOb09wLF8gYXMgaXNOb2RlLExuIGFzIGlzTm9kZUxpc3QsVG4gYXMgaXNOb2RlVHlwZSxZIGFzIGlzTnVsbCxubiBhcyBpc051bWJlcix0biBhcyBpc051bWJlckxpa2Usb24gYXMgaXNPYmplY3QsdW4gYXMgaXNPYmplY3RMaWtlLGFuIGFzIGlzUHJpbWl0aXZlLEMgYXMgaXNQcm9kLHNuIGFzIGlzUHJvbWlzZSx2biBhcyBpc1JlZ2V4LE1uIGFzIGlzU2VsZWN0LGduIGFzIGlzU2V0LEYgYXMgaXNTdGFnaW5nLHEgYXMgaXNTdHJpbmcsWCBhcyBpc1N5bWJvbCxBbiBhcyBpc1N5bnRheEVycm9yLHpuIGFzIGlzVHJ1ZSx3biBhcyBpc1RydXRoeSxqbiBhcyBpc1R5cGVFcnJvcixJIGFzIGlzVW5kZWZpbmVkLEIgYXMgaXNXZWJXb3JrZXIsZyBhcyBub09wfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuYWx5dGljcy11dGlsLXR5cGVzLm1vZHVsZS5qcy5tYXBcbiIsImV4cG9ydHtkZWZhdWx0IGFzIGRvdFByb3B9ZnJvbVwiZGx2XCI7aW1wb3J0e2lzQnJvd3NlciBhcyBlLGlzU3RyaW5nIGFzIHIsaXNSZWdleCBhcyB0fWZyb21cIkBhbmFseXRpY3MvdHlwZS11dGlsc1wiO2Z1bmN0aW9uIG4oZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZS5yZXBsYWNlKC9cXCsvZyxcIiBcIikpfWNhdGNoKGUpe3JldHVybiBudWxsfX1mdW5jdGlvbiBvKCl7aWYoZSl7dmFyIHI9bmF2aWdhdG9yLHQ9ci5sYW5ndWFnZXM7cmV0dXJuIHIudXNlckxhbmd1YWdlfHwodCYmdC5sZW5ndGg/dFswXTpyLmxhbmd1YWdlKX19ZnVuY3Rpb24gYSgpe3RyeXtyZXR1cm4gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lfWNhdGNoKGUpe319ZnVuY3Rpb24gaShyKXtpZighZSlyZXR1cm4hMTt2YXIgdD1yfHxkb2N1bWVudC5yZWZlcnJlcjtpZih0KXt2YXIgbj13aW5kb3cuZG9jdW1lbnQubG9jYXRpb24ucG9ydCxvPXQuc3BsaXQoXCIvXCIpWzJdO3JldHVybiBuJiYobz1vLnJlcGxhY2UoXCI6XCIrbixcIlwiKSksbyE9PXdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX1yZXR1cm4hMX1mdW5jdGlvbiB1KG4pe2lmKCFlKXJldHVybiEwO3ZhciBvPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO3JldHVybiEhT2JqZWN0LmtleXMobykuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciBhPW9bZV0uc3JjO3JldHVybiByKG4pPy0xIT09YS5pbmRleE9mKG4pOiEhdChuKSYmYS5tYXRjaChuKX0pLmxlbmd0aH1mdW5jdGlvbiBjKGUscil7dmFyIHQ9KGUuc3BsaXQoXCI/XCIpfHxbLF0pWzFdO2lmKCF0fHwtMT09PXQuaW5kZXhPZihyKSlyZXR1cm4gZTt2YXIgbj1uZXcgUmVnRXhwKFwiKFxcXFwmfFxcXFw/KVwiK3IrJyhbX0EtWmEtejAtOVwiKz0uXFxcXC9cXFxcLUAlXSspJyxcImdcIiksbz0oXCI/XCIrdCkucmVwbGFjZShuLFwiXCIpLnJlcGxhY2UoL14mLyxcIj9cIik7cmV0dXJuIGUucmVwbGFjZShcIj9cIit0LG8pfWZ1bmN0aW9uIGwoZSxyKXtyZXR1cm4gbigoUmVnRXhwKGUrXCI9KC4rPykoJnwkKVwiKS5leGVjKHIpfHxbLFwiXCJdKVsxXSl9ZnVuY3Rpb24gcyhyKXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciByLHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxvPS8oW14mPV0rKT0/KFteJl0qKS9nO3I9by5leGVjKGUpOyl7dmFyIGE9bihyWzFdKSxpPW4oclsyXSk7aWYoYSlpZihcIltdXCI9PT1hLnN1YnN0cmluZyhhLmxlbmd0aC0yKSl7dmFyIHU9dFthPWEuc3Vic3RyaW5nKDAsYS5sZW5ndGgtMildfHwodFthXT1bXSk7dFthXT1BcnJheS5pc0FycmF5KHUpP3U6W10sdFthXS5wdXNoKGkpfWVsc2UgdFthXT1cIlwiPT09aXx8aX1mb3IodmFyIGMgaW4gdCl7dmFyIGw9Yy5zcGxpdChcIltcIik7bC5sZW5ndGg+MSYmKG0odCxsLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bP1tcXF1cXFxcIF0vZyxcIlwiKX0pLHRbY10pLGRlbGV0ZSB0W2NdKX1yZXR1cm4gdH0oZnVuY3Rpb24ocil7aWYocil7dmFyIHQ9ci5tYXRjaCgvXFw/KC4qKS8pO3JldHVybiB0JiZ0WzFdP3RbMV0uc3BsaXQoXCIjXCIpWzBdOlwiXCJ9cmV0dXJuIGUmJndpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpfShyKSl9ZnVuY3Rpb24gbShlLHIsdCl7Zm9yKHZhciBuPXIubGVuZ3RoLTEsbz0wO288bjsrK28pe3ZhciBhPXJbb107aWYoXCJfX3Byb3RvX19cIj09PWF8fFwiY29uc3RydWN0b3JcIj09PWEpYnJlYWs7YSBpbiBlfHwoZVthXT17fSksZT1lW2FdfWVbcltuXV09dH1mdW5jdGlvbiBmKHIsdCl7cmV0dXJuIGU/bmV3IFByb21pc2UoZnVuY3Rpb24oZSxuKXtpZih3aW5kb3cuaGlzdG9yeSYmd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKXt2YXIgbz13aW5kb3cubG9jYXRpb24uaHJlZixhPWMobyxyKTtvIT09YSYmaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sXCJcIixhKX1yZXR1cm4gdCYmdCgpLGUoKX0pOlByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIGcocil7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7cmV0dXJuIHQuc2V0QXR0cmlidXRlKFwiaHJlZlwiLHIpLHQuaG9zdG5hbWV9ZnVuY3Rpb24gcChlKXtyZXR1cm4oZyhlKXx8XCJcIikuc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKX1mdW5jdGlvbiB4KGUpe3ZhciByPWUuc3BsaXQoXCIuXCIpO3JldHVybiByLmxlbmd0aD4xP3Iuc2xpY2UoMCwtMSkuam9pbihcIi5cIik6ZX12YXIgZD17dHJpbVRsZDp4LGdldERvbWFpbkJhc2U6cCxnZXREb21haW5Ib3N0Omd9LHY9XCJnb29nbGVcIjtmdW5jdGlvbiBoKHIsdCl7aWYoIWUpcmV0dXJuITE7dmFyIG49e3NvdXJjZTpcIihkaXJlY3QpXCIsbWVkaXVtOlwiKG5vbmUpXCIsY2FtcGFpZ246XCIobm90IHNldClcIn07ciYmaShyKSYmKG4ucmVmZXJyZXI9cik7dmFyIG89ZnVuY3Rpb24ocil7aWYoIXJ8fCFlKXJldHVybiExO3ZhciB0PXAociksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtpZihuLmhyZWY9cixuLmhvc3RuYW1lLmluZGV4T2Yodik+LTEmJih0PXYpLHlbdF0pe3ZhciBvPXlbdF0sYT1uZXcgUmVnRXhwKChcInN0cmluZ1wiPT10eXBlb2Ygbz9vOm8ucCkrXCI9Lio/KFteJiNdKnwkKVwiLFwiZ2lcIiksdT1uLnNlYXJjaC5tYXRjaChhKTtyZXR1cm57c291cmNlOm8ubnx8eCh0KSxtZWRpdW06XCJvcmdhbmljXCIsdGVybToodT91WzBdLnNwbGl0KFwiPVwiKVsxXTpcIlwiKXx8XCIobm90IHByb3ZpZGVkKVwifX12YXIgYz1pKHIpP1wicmVmZXJyYWxcIjpcImludGVybmFsXCI7cmV0dXJue3NvdXJjZTpuLmhvc3RuYW1lLG1lZGl1bTpjfX0ocik7byYmT2JqZWN0LmtleXMobykubGVuZ3RoJiYobj1PYmplY3QuYXNzaWduKHt9LG4sbykpO3ZhciBhPXModCksdT1PYmplY3Qua2V5cyhhKTtpZighdS5sZW5ndGgpcmV0dXJuIG47dmFyIGM9dS5yZWR1Y2UoZnVuY3Rpb24oZSxyKXtyZXR1cm4gci5tYXRjaCgvXnV0bV8vKSYmKGVbXCJcIityLnJlcGxhY2UoL151dG1fLyxcIlwiKV09YVtyXSksci5tYXRjaCgvXihkfGcpY2xpZC8pJiYoZS5zb3VyY2U9dixlLm1lZGl1bT1hLmdjbGlkP1wiY3BjXCI6XCJjcG1cIixlW3JdPWFbcl0pLGV9LHt9KTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxuLGMpfXZhciB3PVwicVwiLHk9e1wiZGF1bS5uZXRcIjp3LFwiZW5pcm8uc2VcIjpcInNlYXJjaF93b3JkXCIsXCJuYXZlci5jb21cIjpcInF1ZXJ5XCIsXCJ5YWhvby5jb21cIjpcInBcIixcIm1zbi5jb21cIjp3LFwiYW9sLmNvbVwiOncsXCJhc2suY29tXCI6dyxcImJhaWR1LmNvbVwiOlwid2RcIixcInlhbmRleC5jb21cIjpcInRleHRcIixcInJhbWJsZXIucnVcIjpcIndvcmRzXCIsZ29vZ2xlOncsXCJiaW5nLmNvbVwiOntwOncsbjpcImxpdmVcIn19O2Z1bmN0aW9uIGIoKXtmb3IodmFyIGU9XCJcIixyPTAsdD00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MDtyKys8MzY7KXt2YXIgbj1cInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiW3ItMV0sbz0xNSZ0O2UrPVwiLVwiPT1ufHxcIjRcIj09bj9uOihcInhcIj09bj9vOjMmb3w4KS50b1N0cmluZygxNiksdD1yJTg9PTA/NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDA6dD4+NH1yZXR1cm4gZX1mdW5jdGlvbiBPKGUscil7dmFyIHQsbixvLGE9bnVsbCxpPTAsdT1mdW5jdGlvbigpe2k9bmV3IERhdGUsYT1udWxsLG89ZS5hcHBseSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1uZXcgRGF0ZTtpfHwoaT1jKTt2YXIgbD1yLShjLWkpO3JldHVybiB0PXRoaXMsbj1hcmd1bWVudHMsbDw9MD8oY2xlYXJUaW1lb3V0KGEpLGE9bnVsbCxpPWMsbz1lLmFwcGx5KHQsbikpOmF8fChhPXNldFRpbWVvdXQodSxsKSksb319ZXhwb3J0e24gYXMgZGVjb2RlVXJpLG8gYXMgZ2V0QnJvd3NlckxvY2FsZSxhIGFzIGdldFRpbWVab25lLGkgYXMgaXNFeHRlcm5hbFJlZmVycmVyLHUgYXMgaXNTY3JpcHRMb2FkZWQsYyBhcyBwYXJhbXNDbGVhbixsIGFzIHBhcmFtc0dldCxzIGFzIHBhcmFtc1BhcnNlLGYgYXMgcGFyYW1zUmVtb3ZlLGggYXMgcGFyc2VSZWZlcnJlcixPIGFzIHRocm90dGxlLGQgYXMgdXJsLGIgYXMgdXVpZH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmFseXRpY3MtdXRpbHMubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e1BSRUZJWCBhcyB0LE9CSkVDVCBhcyBlLFVOREVGSU5FRCBhcyByfWZyb21cIkBhbmFseXRpY3MvdHlwZS11dGlsc1wiO3ZhciBuPVwiZ2xvYmFsXCIsbz10K24rdCxsPXR5cGVvZiBzZWxmPT09ZSYmc2VsZi5zZWxmPT09c2VsZiYmc2VsZnx8dHlwZW9mIGdsb2JhbD09PWUmJmdsb2JhbFtuXT09PWdsb2JhbCYmZ2xvYmFsfHx2b2lkIDA7ZnVuY3Rpb24gZih0KXtyZXR1cm4gbFtvXVt0XX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGxbb11bdF09ZX1mdW5jdGlvbiBpKHQpe2RlbGV0ZSBsW29dW3RdfWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBuO3RyeXtpZihzKHQpKXt2YXIgbz13aW5kb3dbdF07bj1vW2VdLmJpbmQobyl9fWNhdGNoKHQpe31yZXR1cm4gbnx8cn1sW29dfHwobFtvXT17fSk7dmFyIGM9e307ZnVuY3Rpb24gcyh0KXtpZih0eXBlb2YgY1t0XSE9PXIpcmV0dXJuIGNbdF07dHJ5e3ZhciBlPXdpbmRvd1t0XTtlLnNldEl0ZW0ocixyKSxlLnJlbW92ZUl0ZW0ocil9Y2F0Y2goZSl7cmV0dXJuIGNbdF09ITF9cmV0dXJuIGNbdF09ITB9ZXhwb3J0e24gYXMgR0xPQkFMLG8gYXMgS0VZLGYgYXMgZ2V0LGwgYXMgZ2xvYmFsQ29udGV4dCxzIGFzIGhhc1N1cHBvcnQsaSBhcyByZW1vdmUsYSBhcyBzZXQsdSBhcyB3cmFwfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuYWx5dGljcy11dGlsLWdsb2JhbC1zdG9yYWdlLm1vZHVsZS5qcy5tYXBcbiIsInZhciBuLGU9XCJmdW5jdGlvblwiLHQ9XCJzdHJpbmdcIixvPVwidW5kZWZpbmVkXCIscj1cImJvb2xlYW5cIixpPVwib2JqZWN0XCIsdT1cImFycmF5XCIsYz1cIm51bWJlclwiLGE9ZnVuY3Rpb24oKXt9LGY9XCJhbnlcIixsPVwiKlwiLHM9XCJub25lXCIsZD1cImhpZGRlblwiLHA9XCJfX1wiLHk9XCJmb3JtXCIsZz1cImlucHV0XCIsYj1cImJ1dHRvblwiLG09XCJzZWxlY3RcIix2PVwiY2hhbmdlXCIsaj1cInN1Ym1pdFwiLGg9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3M/cHJvY2Vzczp7fSxBPShudWxsPT0obj1oLmVudik/dm9pZCAwOm4uTk9ERV9FTlYpfHxcIlwiLE89XCJwcm9kdWN0aW9uXCI9PT1BLHc9XCJzdGFnaW5nXCI9PT1BLFo9XCJkZXZlbG9wbWVudFwiPT09QSx6PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csTj16JiZcImxvY2FsaG9zdFwiPT09d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFA9bnVsbCE9aC52ZXJzaW9ucyYmbnVsbCE9aC52ZXJzaW9ucy5ub2RlLFM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIERlbm8mJnZvaWQgMCE9PURlbm8uY29yZSxEPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLmNvbnN0cnVjdG9yJiZcIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXCI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUsRT16JiZcIm5vZGVqc1wiPT09d2luZG93Lm5hbWV8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJihuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKFwiTm9kZS5qc1wiKXx8bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcyhcImpzZG9tXCIpKTtmdW5jdGlvbiBDKG4sZSl7cmV0dXJuIHR5cGVvZiBlPT09bn12YXIgXz1DLmJpbmQobnVsbCxcImZ1bmN0aW9uXCIpLEw9Qy5iaW5kKG51bGwsXCJzdHJpbmdcIiksJD1DLmJpbmQobnVsbCxcInVuZGVmaW5lZFwiKSx4PUMuYmluZChudWxsLFwiYm9vbGVhblwiKTtmdW5jdGlvbiBGKG4pe3JldHVybiBudWxsPT09bn1mdW5jdGlvbiBUKG4pe3JldHVybiFpc05hTihwYXJzZUZsb2F0KG4pKX1mdW5jdGlvbiBrKG4pe3JldHVybiEhXyhuKSYmL15jbGFzcyAvLnRlc3QoRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikpfWZ1bmN0aW9uIEcobil7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pfWZ1bmN0aW9uIEgobil7cmV0dXJuIG4mJihcIm9iamVjdFwiPT10eXBlb2Ygbnx8bnVsbCE9PW4pfWZ1bmN0aW9uIE0obil7aWYoIUgobikpcmV0dXJuITE7Zm9yKHZhciBlPW47bnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTspZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuKT09PWV9ZnVuY3Rpb24gUihuKXtpZihGKG4pKXJldHVybiEwO3N3aXRjaCh0eXBlb2Ygbil7Y2FzZVwic3RyaW5nXCI6Y2FzZVwibnVtYmVyXCI6Y2FzZVwic3ltYm9sXCI6Y2FzZVwidW5kZWZpbmVkXCI6Y2FzZVwiYm9vbGVhblwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFUobil7cmV0dXJuISFuJiYhISghJChQcm9taXNlKSYmbiBpbnN0YW5jZW9mIFByb21pc2V8fG4udGhlbiYmXyhuLnRoZW4pKX1mdW5jdGlvbiBWKG4pe3JldHVybiBuIGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIFcobil7cmV0dXJuIEgobikmJkwobi5tZXNzYWdlKSYmTChuLm5hbWUpfWZ1bmN0aW9uIHEobil7aWYoIV8obikpcmV0dXJuITE7dmFyIGU9L3soXFxyfFxcbnxcXHMpKn0vZ20sdD1hK1wiXCI7cmV0dXJuIHQ9PT0obi50b1N0cmluZygpLm1hdGNoKGUpfHxbXCJcIl0pWzBdLnJlcGxhY2UoZSx0KX1mdW5jdGlvbiBCKG4pe3JldHVybiEoTChuKSYmXCJmYWxzZVwiPT09bi50b0xvd2VyQ2FzZSgpfHwhbil9ZnVuY3Rpb24gSShuKXtyZXR1cm4hKG4ubGVuZ3RoPjMyMCkmJi9eW2EtekEtWjAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLnRlc3Qobil9ZnVuY3Rpb24gSihuKXtyZXR1cm4vXlxcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkXFwuXFxkKyhbKy1dWzAtMl1cXGQ6WzAtNV1cXGR8WikkLy50ZXN0KG4pfWZ1bmN0aW9uIEsobil7cmV0dXJuIE5vZGVMaXN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG4pfWZ1bmN0aW9uIFEobixlKXt2YXIgdD1uIGluc3RhbmNlb2YgRWxlbWVudHx8biBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudDtyZXR1cm4gdCYmZT9YKG4sZSk6dH1mdW5jdGlvbiBYKG4sZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPVwiXCIpLG4mJm4ubm9kZU5hbWU9PT1lLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gWShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseSh2b2lkIDAsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSkpfX12YXIgbm49WShRKSxlbj1ZKFEpLHRuPVkoUSksb249WShRKTtmdW5jdGlvbiBybihuLGUpe2lmKCFufHxcImhpZGRlblwiPT09Z2V0Q29tcHV0ZWRTdHlsZShuKS52aXNpYmlsaXR5KXJldHVybiEwO2Zvcig7bjspe2lmKG51bGwhPWUmJm49PT1lKXJldHVybiExO2lmKFwibm9uZVwiPT09Z2V0Q29tcHV0ZWRTdHlsZShuKS5kaXNwbGF5KXJldHVybiEwO249bi5wYXJlbnRFbGVtZW50fXJldHVybiExfWV4cG9ydHtsIGFzIEFMTCxmIGFzIEFOWSx1IGFzIEFSUkFZLHIgYXMgQk9PTEVBTixiIGFzIEJVVFRPTix2IGFzIENIQU5HRSxBIGFzIEVOVix5IGFzIEZPUk0sZSBhcyBGVU5DVElPTixkIGFzIEhJRERFTixnIGFzIElOUFVULHMgYXMgTk9ORSxjIGFzIE5VTUJFUixpIGFzIE9CSkVDVCxwIGFzIFBSRUZJWCxtIGFzIFNFTEVDVCx0IGFzIFNUUklORyxqIGFzIFNVQk1JVCxvIGFzIFVOREVGSU5FRCxHIGFzIGlzQXJyYXkseCBhcyBpc0Jvb2xlYW4seiBhcyBpc0Jyb3dzZXIsZW4gYXMgaXNCdXR0b24sayBhcyBpc0NsYXNzLFMgYXMgaXNEZW5vLFogYXMgaXNEZXYsUSBhcyBpc0VsZW1lbnQsSSBhcyBpc0VtYWlsLFcgYXMgaXNFcnJvckxpa2Usbm4gYXMgaXNGb3JtLF8gYXMgaXNGdW5jdGlvbixybiBhcyBpc0hpZGRlbix0biBhcyBpc0lucHV0LEogYXMgaXNJc29EYXRlLEUgYXMgaXNKc0RvbSxOIGFzIGlzTG9jYWxIb3N0LHEgYXMgaXNOb09wLFAgYXMgaXNOb2RlLEsgYXMgaXNOb2RlTGlzdCxYIGFzIGlzTm9kZVR5cGUsRiBhcyBpc051bGwsVCBhcyBpc051bWJlcixNIGFzIGlzT2JqZWN0LEggYXMgaXNPYmplY3RMaWtlLFIgYXMgaXNQcmltaXRpdmUsTyBhcyBpc1Byb2QsVSBhcyBpc1Byb21pc2UsViBhcyBpc1JlZ2V4LG9uIGFzIGlzU2VsZWN0LHcgYXMgaXNTdGFnaW5nLEwgYXMgaXNTdHJpbmcsQiBhcyBpc1RydXRoeSwkIGFzIGlzVW5kZWZpbmVkLEQgYXMgaXNXZWJXb3JrZXIsYSBhcyBub09wLEMgYXMgdHlwZU9mfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuYWx5dGljcy11dGlsLXR5cGVzLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IHV1aWQsIGdldEJyb3dzZXJMb2NhbGUsIGdldFRpbWVab25lLCBwYXJhbXNQYXJzZSwgZG90UHJvcCB9IGZyb20gJ2FuYWx5dGljcy11dGlscyc7XG5pbXBvcnQgeyBnZXQsIHJlbW92ZSwgc2V0LCBnbG9iYWxDb250ZXh0LCBLRVkgfSBmcm9tICdAYW5hbHl0aWNzL2dsb2JhbC1zdG9yYWdlLXV0aWxzJztcbmltcG9ydCB7IGlzT2JqZWN0LCBQUkVGSVgsIGlzRnVuY3Rpb24sIGlzQm9vbGVhbiwgaXNTdHJpbmcsIGlzQnJvd3NlciwgaXNBcnJheSBhcyBpc0FycmF5JDEgfSBmcm9tICdAYW5hbHl0aWNzL3R5cGUtdXRpbHMnO1xuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG52YXIgcnVudGltZSA9IHtleHBvcnRzOiB7fX07XG5cbihmdW5jdGlvbiAobW9kdWxlKSB7XG52YXIgcnVudGltZSA9IGZ1bmN0aW9uIChleHBvcnRzKSB7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkJDE7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIG9ialtrZXldO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBJRSA4IGhhcyBhIGJyb2tlbiBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBvbmx5IHdvcmtzIG9uIERPTSBvYmplY3RzLlxuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTsgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cblxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG5cbiAgZXhwb3J0cy53cmFwID0gd3JhcDsgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7IC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307IC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cblxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cblxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9IC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cblxuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcblxuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiYgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgZGVmaW5lKEdwLCBcImNvbnN0cnVjdG9yXCIsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIEdlbmVyYXRvckZ1bmN0aW9uKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpOyAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3IgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA6IGZhbHNlO1xuICB9O1xuXG4gIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpO1xuICAgIH1cblxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9OyAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuXG5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogYXJnXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH0gLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cblxuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjsgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICBpZiAoUHJvbWlzZUltcGwgPT09IHZvaWQgMCkgUHJvbWlzZUltcGwgPSBQcm9taXNlO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfSAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG5cblxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuXG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZSA/IEdlblN0YXRlQ29tcGxldGVkIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkOyAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cblxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0gLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuXG5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG5cbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQkMSkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkJDE7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTsgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jOyAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCQxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9IC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cblxuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH0gLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuXG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcbiAgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIik7IC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cblxuICBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuXG4gICAga2V5cy5yZXZlcnNlKCk7IC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cblxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuXG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cblxuXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcblxuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSxcbiAgICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZCQxO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfSAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG5cblxuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQkMSxcbiAgICAgIGRvbmU6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIChza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDsgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQkMTtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQkMTtcbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQkMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcblxuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIChleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCQxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiAodHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJiBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJiAodHlwZSA9PT0gXCJicmVha1wiIHx8IHR5cGUgPT09IFwiY29udGludWVcIikgJiYgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIChyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fCByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIChmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uICh0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cblxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiAoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQkMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9OyAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cblxuICByZXR1cm4gZXhwb3J0cztcbn0oIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4vLyBhcyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBlbXB0eVxuLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbm1vZHVsZS5leHBvcnRzICk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCBpbiBtb2Rlcm4gZW5naW5lc1xuICAvLyB3ZSBjYW4gZXhwbGljaXRseSBhY2Nlc3MgZ2xvYmFsVGhpcy4gSW4gb2xkZXIgZW5naW5lcyB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxufShydW50aW1lKSk7XG5cbnZhciByZWdlbmVyYXRvciA9IHJ1bnRpbWUuZXhwb3J0cztcblxudmFyIEZVTkMgPSAnZnVuY3Rpb24nO1xudmFyIFVOREVGID0gJ3VuZGVmaW5lZCc7XG52YXIgUkVEVUNFUiA9ICdyZWR1Y2VyJztcbnZhciBiYXNlID0gJ0BAcmVkdXgvJztcbnZhciBBQ1RJT05fSU5JVCA9IGJhc2UgKyAnSU5JVCc7XG52YXIgQUNUSU9OX1RFU1QgPSBiYXNlICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNik7XG5cbnZhciAkJG9ic2VydmFibGUgPSAvKiAjX19QVVJFX18gKi9mdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKFN5bWJvbCkpID09PSBGVU5DICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICdAQG9ic2VydmFibGUnO1xufSgpO1xuLypcbiAqIENyZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxuICogVGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgZGF0YSBpbiB0aGUgc3RvcmUgaXMgdG8gY2FsbCBgZGlzcGF0Y2goKWAgb24gaXQuXG4gKlxuICogVGhlcmUgc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgc3RvcmUgaW4geW91ciBhcHAuIFRvIHNwZWNpZnkgaG93IGRpZmZlcmVudFxuICogcGFydHMgb2YgdGhlIHN0YXRlIHRyZWUgcmVzcG9uZCB0byBhY3Rpb25zLCB5b3UgbWF5IGNvbWJpbmUgc2V2ZXJhbCByZWR1Y2Vyc1xuICogaW50byBhIHNpbmdsZSByZWR1Y2VyIGZ1bmN0aW9uIGJ5IHVzaW5nIGBjb21iaW5lUmVkdWNlcnNgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZHVjZXIgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5leHQgc3RhdGUgdHJlZSwgZ2l2ZW5cbiAqIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBhY3Rpb24gdG8gaGFuZGxlLlxuICpcbiAqIEBwYXJhbSB7YW55fSBbcHJlbG9hZGVkU3RhdGVdIFRoZSBpbml0aWFsIHN0YXRlLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxuICogdG8gaHlkcmF0ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc2VydmVyIGluIHVuaXZlcnNhbCBhcHBzLCBvciB0byByZXN0b3JlIGFcbiAqIHByZXZpb3VzbHkgc2VyaWFsaXplZCB1c2VyIHNlc3Npb24uXG4gKiBJZiB5b3UgdXNlIGBjb21iaW5lUmVkdWNlcnNgIHRvIHByb2R1Y2UgdGhlIHJvb3QgcmVkdWNlciBmdW5jdGlvbiwgdGhpcyBtdXN0IGJlXG4gKiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZSBhcyBgY29tYmluZVJlZHVjZXJzYCBrZXlzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtlbmhhbmNlcl0gVGhlIHN0b3JlIGVuaGFuY2VyLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxuICogdG8gZW5oYW5jZSB0aGUgc3RvcmUgd2l0aCB0aGlyZC1wYXJ0eSBjYXBhYmlsaXRpZXMgc3VjaCBhcyBtaWRkbGV3YXJlLFxuICogdGltZSB0cmF2ZWwsIHBlcnNpc3RlbmNlLCBldGMuIFRoZSBvbmx5IHN0b3JlIGVuaGFuY2VyIHRoYXQgc2hpcHMgd2l0aCBSZWR1eFxuICogaXMgYGFwcGx5TWlkZGxld2FyZSgpYC5cbiAqXG4gKiBAcmV0dXJucyB7U3RvcmV9IEEgUmVkdXggc3RvcmUgdGhhdCBsZXRzIHlvdSByZWFkIHRoZSBzdGF0ZSwgZGlzcGF0Y2ggYWN0aW9uc1xuICogYW5kIHN1YnNjcmliZSB0byBjaGFuZ2VzLlxuICovXG5cblxudmFyIG1zZyA9ICcgIT0gJyArIEZVTkM7XG5mdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgaWYgKF90eXBlb2YocHJlbG9hZGVkU3RhdGUpID09PSBGVU5DICYmIF90eXBlb2YoZW5oYW5jZXIpID09PSBVTkRFRikge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoX3R5cGVvZihlbmhhbmNlcikgIT09IFVOREVGKSB7XG4gICAgaWYgKF90eXBlb2YoZW5oYW5jZXIpICE9PSBGVU5DKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VuaGFuY2VyJyArIG1zZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAoX3R5cGVvZihyZWR1Y2VyKSAhPT0gRlVOQykge1xuICAgIHRocm93IG5ldyBFcnJvcihSRURVQ0VSICsgbXNnKTtcbiAgfVxuXG4gIHZhciBjdXJyZW50UmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgdmFyIGN1cnJlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzO1xuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgfVxuICB9XG4gIC8qXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgY3VycmVudCBzdGF0ZSB0cmVlIG9mIHlvdXIgYXBwbGljYXRpb24uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTtcbiAgfVxuICAvKlxuICAgKiBBZGRzIGEgY2hhbmdlIGxpc3RlbmVyLiBJdCB3aWxsIGJlIGNhbGxlZCBhbnkgdGltZSBhbiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cbiAgICogY2FsbCBgZ2V0U3RhdGUoKWAgdG8gcmVhZCB0aGUgY3VycmVudCBzdGF0ZSB0cmVlIGluc2lkZSB0aGUgY2FsbGJhY2suXG4gICAqXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAqIGNhdmVhdHM6XG4gICAqXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cbiAgICogSWYgeW91IHN1YnNjcmliZSBvciB1bnN1YnNjcmliZSB3aGlsZSB0aGUgbGlzdGVuZXJzIGFyZSBiZWluZyBpbnZva2VkLCB0aGlzXG4gICAqIHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYGRpc3BhdGNoKClgIHRoYXQgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcbiAgICogcmVjZW50IHNuYXBzaG90IG9mIHRoZSBzdWJzY3JpcHRpb24gbGlzdC5cbiAgICpcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXG4gICAqIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkIG11bHRpcGxlIHRpbWVzIGR1cmluZyBhIG5lc3RlZCBgZGlzcGF0Y2goKWAgYmVmb3JlXG4gICAqIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQuIEl0IGlzLCBob3dldmVyLCBndWFyYW50ZWVkIHRoYXQgYWxsIHN1YnNjcmliZXJzXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcbiAgICogc3RhdGUgYnkgdGhlIHRpbWUgaXQgZXhpdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGlzIGNoYW5nZSBsaXN0ZW5lci5cbiAgICovXG5cblxuICBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoX3R5cGVvZihsaXN0ZW5lcikgIT09IEZVTkMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTGlzdGVuZXInICsgbXNnKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgbmV4dExpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuIGFjdGlvbi4gSXQgaXMgdGhlIG9ubHkgd2F5IHRvIHRyaWdnZXIgYSBzdGF0ZSBjaGFuZ2UuXG4gICAqXG4gICAqIFRoZSBgcmVkdWNlcmAgZnVuY3Rpb24sIHVzZWQgdG8gY3JlYXRlIHRoZSBzdG9yZSwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGVcbiAgICogY3VycmVudCBzdGF0ZSB0cmVlIGFuZCB0aGUgZ2l2ZW4gYGFjdGlvbmAuIEl0cyByZXR1cm4gdmFsdWUgd2lsbFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXG4gICAqIHdpbGwgYmUgbm90aWZpZWQuXG4gICAqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXG4gICAqIGRpc3BhdGNoIGEgUHJvbWlzZSwgYW4gT2JzZXJ2YWJsZSwgYSB0aHVuaywgb3Igc29tZXRoaW5nIGVsc2UsIHlvdSBuZWVkIHRvXG4gICAqIHdyYXAgeW91ciBzdG9yZSBjcmVhdGluZyBmdW5jdGlvbiBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG1pZGRsZXdhcmUuIEZvclxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXG4gICAqIG1pZGRsZXdhcmUgd2lsbCBldmVudHVhbGx5IGRpc3BhdGNoIHBsYWluIG9iamVjdCBhY3Rpb25zIHVzaW5nIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyDigJx3aGF0IGNoYW5nZWTigJ0uIEl0IGlzXG4gICAqIGEgZ29vZCBpZGVhIHRvIGtlZXAgYWN0aW9ucyBzZXJpYWxpemFibGUgc28geW91IGNhbiByZWNvcmQgYW5kIHJlcGxheSB1c2VyXG4gICAqIHNlc3Npb25zLCBvciB1c2UgdGhlIHRpbWUgdHJhdmVsbGluZyBgcmVkdXgtZGV2dG9vbHNgLiBBbiBhY3Rpb24gbXVzdCBoYXZlXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxuICAgKiBzdHJpbmcgY29uc3RhbnRzIGZvciBhY3Rpb24gdHlwZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cbiAgICpcbiAgICogTm90ZSB0aGF0LCBpZiB5b3UgdXNlIGEgY3VzdG9tIG1pZGRsZXdhcmUsIGl0IG1heSB3cmFwIGBkaXNwYXRjaCgpYCB0b1xuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgLyogLy8gYWRkIGRlZmF1bHQgaW5mbyB0byBhY3Rpb25zLi4uIFxuICAgIGNvbnNvbGUubG9nKCdkaXNwYXRjaCBiZWZvcmUnLCBfYWN0aW9uKVxuICAgIGNvbnN0IGFjdGlvbiA9IHtcbiAgICAgIC4uLl9hY3Rpb24sXG4gICAgICAuLi57XG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIC4uLl9hY3Rpb24uYWN0aW9uLFxuICAgICAgICAgIC4uLnsgY3VzdG9tSW5mbzogJ3lvb29vJ30gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ2Rpc3BhdGNoIGFmdGVyJywgYWN0aW9uKVxuICAgIC8qKiAqL1xuICAgIGlmICghaXNPYmplY3QoYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY3QgIT0gb2JqJyk7XG4gICAgfVxuXG4gICAgaWYgKF90eXBlb2YoYWN0aW9uLnR5cGUpID09PSBVTkRFRikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY3RUeXBlICcgKyBVTkRFRik7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzcGF0Y2ggaW4gJyArIFJFRFVDRVIpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcbiAgICogaW1wbGVtZW50IGEgaG90IHJlbG9hZGluZyBtZWNoYW5pc20gZm9yIFJlZHV4LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG5cblxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xuICAgIGlmIChfdHlwZW9mKG5leHRSZWR1Y2VyKSAhPT0gRlVOQykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXh0ICcgKyBSRURVQ0VSICsgbXNnKTtcbiAgICB9XG5cbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFDVElPTl9JTklUXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEludGVyb3BlcmFiaWxpdHkgcG9pbnQgZm9yIG9ic2VydmFibGUvcmVhY3RpdmUgbGlicmFyaWVzLlxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgb2JzZXJ2YWJsZSBwcm9wb3NhbDpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XG4gICAgdmFyIG91dGVyU3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe1xuICAgICAgLypcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlciBBbnkgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gb2JzZXJ2ZXIuXG4gICAgICAgKiBUaGUgb2JzZXJ2ZXIgb2JqZWN0IHNob3VsZCBoYXZlIGEgYG5leHRgIG1ldGhvZC5cbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXG4gICAgICAgKiBiZSB1c2VkIHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIGZyb20gdGhlIHN0b3JlLCBhbmQgcHJldmVudCBmdXJ0aGVyXG4gICAgICAgKiBlbWlzc2lvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgb2JzZXJ2YWJsZS5cbiAgICAgICAqL1xuICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgICAgaWYgKF90eXBlb2Yob2JzZXJ2ZXIpICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09ic2VydmVyICE9IG9iaicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xuICAgICAgICAgIGlmIChvYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGdldFN0YXRlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xuICAgICAgICB2YXIgdW5zdWJzY3JpYmUgPSBvdXRlclN1YnNjcmliZShvYnNlcnZlU3RhdGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sICQkb2JzZXJ2YWJsZSwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gIH0gLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFwiSU5JVFwiIGFjdGlvbiBpcyBkaXNwYXRjaGVkIHNvIHRoYXQgZXZlcnlcbiAgLy8gcmVkdWNlciByZXR1cm5zIHRoZWlyIGluaXRpYWwgc3RhdGUuIFRoaXMgZWZmZWN0aXZlbHkgcG9wdWxhdGVzXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXG5cblxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogQUNUSU9OX0lOSVRcbiAgfSk7XG4gIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe1xuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZSxcbiAgICBnZXRTdGF0ZTogZ2V0U3RhdGUsXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXG4gIH0sICQkb2JzZXJ2YWJsZSwgb2JzZXJ2YWJsZSk7XG59XG5cbmZ1bmN0aW9uIGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKGtleSwgYWN0aW9uKSB7XG4gIHZhciBhY3Rpb25UeXBlID0gYWN0aW9uICYmIGFjdGlvbi50eXBlO1xuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgYWN0aW9uVHlwZS50b1N0cmluZygpIHx8ICc/JztcbiAgcmV0dXJuICdhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyBSRURVQ0VSICsgJyAnICsga2V5ICsgJyByZXR1cm5zICcgKyBVTkRFRjtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0UmVkdWNlclNoYXBlKHJlZHVjZXJzKSB7XG4gIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IHJlZHVjZXIodW5kZWZpbmVkLCB7XG4gICAgICB0eXBlOiBBQ1RJT05fSU5JVFxuICAgIH0pO1xuXG4gICAgaWYgKF90eXBlb2YoaW5pdGlhbFN0YXRlKSA9PT0gVU5ERUYgfHwgX3R5cGVvZihyZWR1Y2VyKHVuZGVmaW5lZCwge1xuICAgICAgdHlwZTogQUNUSU9OX1RFU1RcbiAgICB9KSkgPT09IFVOREVGKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoUkVEVUNFUiArICcgJyArIGtleSArICcgJyArIFVOREVGKTtcbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBkaWZmZXJlbnQgcmVkdWNlciBmdW5jdGlvbnMsIGludG8gYSBzaW5nbGVcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcbiAqIGludG8gYSBzaW5nbGUgc3RhdGUgb2JqZWN0LCB3aG9zZSBrZXlzIGNvcnJlc3BvbmQgdG8gdGhlIGtleXMgb2YgdGhlIHBhc3NlZFxuICogcmVkdWNlciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlZHVjZXJzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjb21iaW5lZCBpbnRvIG9uZS4gT25lIGhhbmR5IHdheSB0byBvYnRhaW5cbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXG4gKiB1bmRlZmluZWQgZm9yIGFueSBhY3Rpb24uIEluc3RlYWQsIHRoZXkgc2hvdWxkIHJldHVybiB0aGVpciBpbml0aWFsIHN0YXRlXG4gKiBpZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZW0gd2FzIHVuZGVmaW5lZCwgYW5kIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnlcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGV2ZXJ5IHJlZHVjZXIgaW5zaWRlIHRoZVxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxuICovXG5cblxuZnVuY3Rpb24gY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xuXG4gICAgaWYgKF90eXBlb2YocmVkdWNlcnNba2V5XSkgPT09IEZVTkMpIHtcbiAgICAgIGZpbmFsUmVkdWNlcnNba2V5XSA9IHJlZHVjZXJzW2tleV07XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmFsUmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhmaW5hbFJlZHVjZXJzKTtcblxuICB2YXIgc2hhcGVBc3NlcnRpb25FcnJvcjtcblxuICB0cnkge1xuICAgIGFzc2VydFJlZHVjZXJTaGFwZShmaW5hbFJlZHVjZXJzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xuICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHNoYXBlQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XG4gICAgfVxuXG4gICAgdmFyIGhhc0NoYW5nZWQgPSBmYWxzZTtcbiAgICB2YXIgbmV4dFN0YXRlID0ge307XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZmluYWxSZWR1Y2VyS2V5cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfa2V5ID0gZmluYWxSZWR1Y2VyS2V5c1tfaV07XG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XG4gICAgICB2YXIgcHJldmlvdXNTdGF0ZUZvcktleSA9IHN0YXRlW19rZXldO1xuICAgICAgdmFyIG5leHRTdGF0ZUZvcktleSA9IHJlZHVjZXIocHJldmlvdXNTdGF0ZUZvcktleSwgYWN0aW9uKTtcblxuICAgICAgaWYgKF90eXBlb2YobmV4dFN0YXRlRm9yS2V5KSA9PT0gVU5ERUYpIHtcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKF9rZXksIGFjdGlvbik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0U3RhdGVbX2tleV0gPSBuZXh0U3RhdGVGb3JLZXk7XG4gICAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBuZXh0U3RhdGVGb3JLZXkgIT09IHByZXZpb3VzU3RhdGVGb3JLZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYShiLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0b3JlIGVuaGFuY2VyIHRoYXQgYXBwbGllcyBtaWRkbGV3YXJlIHRvIHRoZSBkaXNwYXRjaCBtZXRob2RcbiAqIG9mIHRoZSBSZWR1eCBzdG9yZS4gVGhpcyBpcyBoYW5keSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLCBzdWNoIGFzIGV4cHJlc3NpbmdcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXG4gKlxuICogU2VlIGByZWR1eC10aHVua2AgcGFja2FnZSBhcyBhbiBleGFtcGxlIG9mIHRoZSBSZWR1eCBtaWRkbGV3YXJlLlxuICpcbiAqIEJlY2F1c2UgbWlkZGxld2FyZSBpcyBwb3RlbnRpYWxseSBhc3luY2hyb25vdXMsIHRoaXMgc2hvdWxkIGJlIHRoZSBmaXJzdFxuICogc3RvcmUgZW5oYW5jZXIgaW4gdGhlIGNvbXBvc2l0aW9uIGNoYWluLlxuICpcbiAqIE5vdGUgdGhhdCBlYWNoIG1pZGRsZXdhcmUgd2lsbCBiZSBnaXZlbiB0aGUgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBmdW5jdGlvbnNcbiAqIGFzIG5hbWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBtaWRkbGV3YXJlcyBUaGUgbWlkZGxld2FyZSBjaGFpbiB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHN0b3JlIGVuaGFuY2VyIGFwcGx5aW5nIHRoZSBtaWRkbGV3YXJlLlxuICovXG5cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKSB7XG4gICAgICB2YXIgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpO1xuICAgICAgdmFyIF9kaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xuICAgICAgdmFyIGNoYWluID0gW107XG4gICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxuICAgICAgICBkaXNwYXRjaDogZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIF9kaXNwYXRjaChhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoZnVuY3Rpb24gKG1pZGRsZXdhcmUpIHtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XG4gICAgICB9KTtcbiAgICAgIF9kaXNwYXRjaCA9IGNvbXBvc2UuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoY2hhaW4pKShzdG9yZS5kaXNwYXRjaCk7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHN0b3JlKSwge30sIHtcbiAgICAgICAgZGlzcGF0Y2g6IF9kaXNwYXRjaFxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBBbm9ueW1vdXMgdmlzaXRvciBJZCBsb2NhbHN0b3JhZ2Uga2V5XG4gKiBAdHlwZWRlZiB7U3RyaW5nfSBBTk9OX0lEXG4gKi9cblxudmFyIEFOT05fSUQgPSBQUkVGSVggKyAnYW5vbl9pZCc7IC8vIF9fYW5vbl9pZFxuXG4vKipcbiAqIFZpc2l0b3IgSWQgbG9jYWxzdG9yYWdlIGtleVxuICogQHR5cGVkZWYge1N0cmluZ30gVVNFUl9JRFxuICovXG5cbnZhciBVU0VSX0lEID0gUFJFRklYICsgJ3VzZXJfaWQnOyAvLyBfX3VzZXJfaWRcblxuLyoqXG4gKiBWaXNpdG9yIHRyYWl0cyBsb2NhbHN0b3JhZ2Uga2V5XG4gKiBAdHlwZWRlZiB7U3RyaW5nfSBVU0VSX1RSQUlUU1xuICovXG5cbnZhciBVU0VSX1RSQUlUUyA9IFBSRUZJWCArICd1c2VyX3RyYWl0cyc7IC8vIF9fdXNlcl90cmFpdHNcblxudmFyIGNvbnN0YW50cyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBTk9OX0lEOiBBTk9OX0lELFxuICBVU0VSX0lEOiBVU0VSX0lELFxuICBVU0VSX1RSQUlUUzogVVNFUl9UUkFJVFNcbn0pO1xuXG52YXIgTElCX05BTUUgPSAnYW5hbHl0aWNzJztcbnZhciBJRCA9ICd1c2VySWQnO1xudmFyIEFOT05JRCA9ICdhbm9ueW1vdXNJZCc7XG52YXIgRVJST1JfVVJMID0gJ2h0dHBzOi8vbHl0aWNzLmRldi9lcnJvcnMvJztcblxudmFyIGNvcmVFdmVudHMgPSBbXG4vKipcbiAqIGBib290c3RyYXBgIC0gRmlyZXMgd2hlbiBhbmFseXRpY3MgbGlicmFyeSBzdGFydHMgdXAuXG4gKiBUaGlzIGlzIHRoZSBmaXJzdCBldmVudCBmaXJlZC4gJy5vbi9vbmNlJyBsaXN0ZW5lcnMgYXJlIG5vdCBhbGxvd2VkIG9uIGJvb3RzdHJhcFxuICogUGx1Z2lucyBjYW4gYXR0YWNoIGxvZ2ljIHRvIHRoaXMgZXZlbnRcbiAqL1xuJ2Jvb3RzdHJhcCcsXG4vKipcbiAqIGBwYXJhbXNgIC0gRmlyZXMgd2hlbiBhbmFseXRpY3MgcGFyc2VzIFVSTCBwYXJhbWV0ZXJzXG4gKi9cbidwYXJhbXMnLFxuLyoqXG4gKiBgY2FtcGFpZ25gIC0gRmlyZXMgaWYgcGFyYW1zIGNvbnRhaW4gXCJ1dG1cIiBwYXJhbWV0ZXJzXG4gKi9cbidjYW1wYWlnbicsXG4vKipcbiAqIGBpbml0aWFsaXplU3RhcnRgIC0gRmlyZXMgYmVmb3JlICdpbml0aWFsaXplJywgYWxsb3dzIGZvciBwbHVnaW5zIHRvIGNhbmNlbCBsb2FkaW5nIG9mIG90aGVyIHBsdWdpbnNcbiAqL1xuJ2luaXRpYWxpemVTdGFydCcsXG4vKipcbiAqIGBpbml0aWFsaXplYCAtIEZpcmVzIHdoZW4gYW5hbHl0aWNzIGxvYWRzIHBsdWdpbnNcbiAqL1xuJ2luaXRpYWxpemUnLFxuLyoqXG4gKiBgaW5pdGlhbGl6ZUVuZGAgLSBGaXJlcyBhZnRlciBpbml0aWFsaXplLCBhbGxvd3MgZm9yIHBsdWdpbnMgdG8gcnVuIGxvZ2ljIGFmdGVyIGluaXRpYWxpemF0aW9uIG1ldGhvZHMgcnVuXG4gKi9cbidpbml0aWFsaXplRW5kJyxcbi8qKlxuICogYHJlYWR5YCAtIEZpcmVzIHdoZW4gYWxsIGFuYWx5dGljIHByb3ZpZGVycyBhcmUgZnVsbHkgbG9hZGVkLiBUaGlzIHdhaXRzIGZvciAnaW5pdGlhbGl6ZScgYW5kICdsb2FkZWQnIHRvIHJldHVybiB0cnVlXG4gKi9cbidyZWFkeScsXG4vKipcbiAqIGByZXNldFN0YXJ0YCAtIEZpcmVzIGlmIGFuYWx5dGljLnJlc2V0KCkgaXMgY2FsbGVkLlxuICogVXNlIHRoaXMgZXZlbnQgdG8gY2FuY2VsIHJlc2V0IGJhc2VkIG9uIGEgc3BlY2lmaWMgY29uZGl0aW9uXG4gKi9cbidyZXNldFN0YXJ0Jyxcbi8qKlxuICogYHJlc2V0YCAtIEZpcmVzIGlmIGFuYWx5dGljLnJlc2V0KCkgaXMgY2FsbGVkLlxuICogVXNlIHRoaXMgZXZlbnQgdG8gcnVuIGN1c3RvbSBjbGVhbnVwIGxvZ2ljIChpZiBuZWVkZWQpXG4gKi9cbidyZXNldCcsXG4vKipcbiAqIGByZXNldEVuZGAgLSBGaXJlcyBhZnRlciBhbmFseXRpYy5yZXNldCgpIGlzIGNhbGxlZC5cbiAqIFVzZSB0aGlzIGV2ZW50IHRvIHJ1biBhIGNhbGxiYWNrIGFmdGVyIHVzZXIgZGF0YSBpcyByZXNldFxuICovXG4ncmVzZXRFbmQnLFxuLyoqKioqKioqKioqKioqKioqKlxuICogUGFnZSBFdmVudHNcbiAqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogYHBhZ2VTdGFydGAgLSBGaXJlcyBiZWZvcmUgJ3BhZ2UnIGV2ZW50cyBmaXJlLlxuICogIFRoaXMgYWxsb3dzIGZvciBkeW5hbWljIHBhZ2UgdmlldyBjYW5jZWxsYXRpb24gYmFzZWQgb24gY3VycmVudCBzdGF0ZSBvZiB1c2VyIG9yIG9wdGlvbnMgcGFzc2VkIGluLlxuICovXG4ncGFnZVN0YXJ0Jyxcbi8qKlxuICogYHBhZ2VgIC0gQ29yZSBhbmFseXRpY3MgaG9vayBmb3IgcGFnZSB2aWV3cy5cbiAqICBJZiB5b3VyIHBsdWdpbiBvciBpbnRlZ3JhdGlvbiB0cmFja3MgcGFnZSB2aWV3cywgdGhpcyBpcyB0aGUgZXZlbnQgdG8gZmlyZSBvbi5cbiAqL1xuJ3BhZ2UnLFxuLyoqXG4gKiBgcGFnZUVuZGAgLSBGaXJlcyBhZnRlciBhbGwgcmVnaXN0ZXJlZCAncGFnZScgbWV0aG9kcyBmaXJlLlxuICovXG4ncGFnZUVuZCcsXG4vKipcbiAqIGBwYWdlQWJvcnRlZGAgLSBGaXJlcyBpZiAncGFnZScgY2FsbCBpcyBjYW5jZWxsZWQgYnkgYSBwbHVnaW5cbiAqL1xuJ3BhZ2VBYm9ydGVkJyxcbi8qKioqKioqKioqKioqKioqXG4gKiBUcmFjayBFdmVudHNcbiAqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogYHRyYWNrU3RhcnRgIC0gQ2FsbGVkIGJlZm9yZSB0aGUgJ3RyYWNrJyBldmVudHMgZmlyZXMuXG4gKiAgVGhpcyBhbGxvd3MgZm9yIGR5bmFtaWMgcGFnZSB2aWV3IGNhbmNlbGxhdGlvbiBiYXNlZCBvbiBjdXJyZW50IHN0YXRlIG9mIHVzZXIgb3Igb3B0aW9ucyBwYXNzZWQgaW4uXG4gKi9cbid0cmFja1N0YXJ0Jyxcbi8qKlxuICogYHRyYWNrYCAtIENvcmUgYW5hbHl0aWNzIGhvb2sgZm9yIGV2ZW50IHRyYWNraW5nLlxuICogIElmIHlvdXIgcGx1Z2luIG9yIGludGVncmF0aW9uIHRyYWNrcyBjdXN0b20gZXZlbnRzLCB0aGlzIGlzIHRoZSBldmVudCB0byBmaXJlIG9uLlxuICovXG4ndHJhY2snLFxuLyoqXG4gKiBgdHJhY2tFbmRgIC0gRmlyZXMgYWZ0ZXIgYWxsIHJlZ2lzdGVyZWQgJ3RyYWNrJyBldmVudHMgZmlyZSBmcm9tIHBsdWdpbnMuXG4gKi9cbid0cmFja0VuZCcsXG4vKipcbiAqIGB0cmFja0Fib3J0ZWRgIC0gRmlyZXMgaWYgJ3RyYWNrJyBjYWxsIGlzIGNhbmNlbGxlZCBieSBhIHBsdWdpblxuICovXG4ndHJhY2tBYm9ydGVkJyxcbi8qKioqKioqKioqKioqKioqKipcbiAqIElkZW50aWZ5IEV2ZW50c1xuICoqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBgaWRlbnRpZnlTdGFydGAgLSBDYWxsZWQgYmVmb3JlIHRoZSAnaWRlbnRpZnknIGV2ZW50cyBmaXJlcy5cbiAqIFRoaXMgYWxsb3dzIGZvciBkeW5hbWljIHBhZ2UgdmlldyBjYW5jZWxsYXRpb24gYmFzZWQgb24gY3VycmVudCBzdGF0ZSBvZiB1c2VyIG9yIG9wdGlvbnMgcGFzc2VkIGluLlxuICovXG4naWRlbnRpZnlTdGFydCcsXG4vKipcbiAqIGBpZGVudGlmeWAgLSBDb3JlIGFuYWx5dGljcyBob29rIGZvciB1c2VyIGlkZW50aWZpY2F0aW9uLlxuICogIElmIHlvdXIgcGx1Z2luIG9yIGludGVncmF0aW9uIGlkZW50aWZpZXMgdXNlcnMgb3IgdXNlciB0cmFpdHMsIHRoaXMgaXMgdGhlIGV2ZW50IHRvIGZpcmUgb24uXG4gKi9cbidpZGVudGlmeScsXG4vKipcbiAqIGBpZGVudGlmeUVuZGAgLSBGaXJlcyBhZnRlciBhbGwgcmVnaXN0ZXJlZCAnaWRlbnRpZnknIGV2ZW50cyBmaXJlIGZyb20gcGx1Z2lucy5cbiAqL1xuJ2lkZW50aWZ5RW5kJyxcbi8qKlxuICogYGlkZW50aWZ5QWJvcnRlZGAgLSBGaXJlcyBpZiAndHJhY2snIGNhbGwgaXMgY2FuY2VsbGVkIGJ5IGEgcGx1Z2luXG4gKi9cbidpZGVudGlmeUFib3J0ZWQnLFxuLyoqXG4gKiBgdXNlcklkQ2hhbmdlZGAgLSBGaXJlcyB3aGVuIGEgdXNlciBpZCBpcyB1cGRhdGVkXG4gKi9cbid1c2VySWRDaGFuZ2VkJyxcbi8qKioqKioqKioqKioqKioqKipcbiAqIFBsdWdpbiBFdmVudHNcbiAqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogYHJlZ2lzdGVyUGx1Z2luc2AgLSBGaXJlcyB3aGVuIGFuYWx5dGljcyBpcyByZWdpc3RlcmluZyBwbHVnaW5zXG4gKi9cbidyZWdpc3RlclBsdWdpbnMnLFxuLyoqXG4gKiBgZW5hYmxlUGx1Z2luYCAtIEZpcmVzIHdoZW4gJ2FuYWx5dGljcy5wbHVnaW5zLmVuYWJsZSgpJyBpcyBjYWxsZWRcbiAqL1xuJ2VuYWJsZVBsdWdpbicsXG4vKipcbiAqIGBkaXNhYmxlUGx1Z2luYCAtIEZpcmVzIHdoZW4gJ2FuYWx5dGljcy5wbHVnaW5zLmRpc2FibGUoKScgaXMgY2FsbGVkXG4gKi9cbidkaXNhYmxlUGx1Z2luJyxcbi8qXG4gKiBgbG9hZFBsdWdpbmAgLSBGaXJlcyB3aGVuICdhbmFseXRpY3MubG9hZFBsdWdpbigpJyBpcyBjYWxsZWRcbiAqL1xuLy8gJ2xvYWRQbHVnaW4nLFxuXG4vKioqKioqKioqKioqKioqKioqXG4gKiBCcm93c2VyIGFjdGl2aXR5IGV2ZW50c1xuICoqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBgb25saW5lYCAtIEZpcmVzIHdoZW4gYnJvd3NlciBuZXR3b3JrIGdvZXMgb25saW5lLlxuICogVGhpcyBmaXJlcyBvbmx5IHdoZW4gY29taW5nIGJhY2sgb25saW5lIGZyb20gYW4gb2ZmbGluZSBzdGF0ZS5cbiAqL1xuJ29ubGluZScsXG4vKipcbiAqIGBvZmZsaW5lYCAtIEZpcmVzIHdoZW4gYnJvd3NlciBuZXR3b3JrIGdvZXMgb2ZmbGluZS5cbiAqL1xuJ29mZmxpbmUnLFxuLyoqKioqKioqKioqKioqKioqKlxuICogU3RvcmFnZSBldmVudHNcbiAqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogYHNldEl0ZW1TdGFydGAgLSBGaXJlcyB3aGVuIGFuYWx5dGljcy5zdG9yYWdlLnNldEl0ZW0gaXMgaW5pdGlhbGl6ZWQuXG4gKiBUaGlzIGV2ZW50IGdpdmVzIHBsdWdpbnMgdGhlIGFiaWxpdHkgdG8gaW50ZXJjZXB0IGtleXMgJiB2YWx1ZXMgYW5kIGFsdGVyIHRoZW0gYmVmb3JlIHRoZXkgYXJlIHBlcnNpc3RlZC5cbiAqL1xuJ3NldEl0ZW1TdGFydCcsXG4vKipcbiAqIGBzZXRJdGVtYCAtIEZpcmVzIHdoZW4gYW5hbHl0aWNzLnN0b3JhZ2Uuc2V0SXRlbSBpcyBjYWxsZWQuXG4gKiBUaGlzIGV2ZW50IGdpdmVzIHBsdWdpbnMgdGhlIGFiaWxpdHkgdG8gaW50ZXJjZXB0IGtleXMgJiB2YWx1ZXMgYW5kIGFsdGVyIHRoZW0gYmVmb3JlIHRoZXkgYXJlIHBlcnNpc3RlZC5cbiAqL1xuJ3NldEl0ZW0nLFxuLyoqXG4gKiBgc2V0SXRlbUVuZGAgLSBGaXJlcyB3aGVuIHNldEl0ZW0gc3RvcmFnZSBpcyBjb21wbGV0ZS5cbiAqL1xuJ3NldEl0ZW1FbmQnLFxuLyoqXG4gKiBgc2V0SXRlbUFib3J0ZWRgIC0gRmlyZXMgd2hlbiBzZXRJdGVtIHN0b3JhZ2UgaXMgY2FuY2VsbGVkIGJ5IGEgcGx1Z2luLlxuICovXG4nc2V0SXRlbUFib3J0ZWQnLFxuLyoqXG4gKiBgcmVtb3ZlSXRlbVN0YXJ0YCAtIEZpcmVzIHdoZW4gYW5hbHl0aWNzLnN0b3JhZ2UucmVtb3ZlSXRlbSBpcyBpbml0aWFsaXplZC5cbiAqIFRoaXMgZXZlbnQgZ2l2ZXMgcGx1Z2lucyB0aGUgYWJpbGl0eSB0byBpbnRlcmNlcHQgcmVtb3ZlSXRlbSBjYWxscyBhbmQgYWJvcnQgLyBhbHRlciB0aGVtLlxuICovXG4ncmVtb3ZlSXRlbVN0YXJ0Jyxcbi8qKlxuICogYHJlbW92ZUl0ZW1gIC0gRmlyZXMgd2hlbiBhbmFseXRpY3Muc3RvcmFnZS5yZW1vdmVJdGVtIGlzIGNhbGxlZC5cbiAqIFRoaXMgZXZlbnQgZ2l2ZXMgcGx1Z2lucyB0aGUgYWJpbGl0eSB0byBpbnRlcmNlcHQgcmVtb3ZlSXRlbSBjYWxscyBhbmQgYWJvcnQgLyBhbHRlciB0aGVtLlxuICovXG4ncmVtb3ZlSXRlbScsXG4vKipcbiAqIGByZW1vdmVJdGVtRW5kYCAtIEZpcmVzIHdoZW4gcmVtb3ZlSXRlbSBzdG9yYWdlIGlzIGNvbXBsZXRlLlxuICovXG4ncmVtb3ZlSXRlbUVuZCcsXG4vKipcbiAqIGByZW1vdmVJdGVtQWJvcnRlZGAgLSBGaXJlcyB3aGVuIHJlbW92ZUl0ZW0gc3RvcmFnZSBpcyBjYW5jZWxsZWQgYnkgYSBwbHVnaW4uXG4gKi9cbidyZW1vdmVJdGVtQWJvcnRlZCddO1xuLyogS2V5cyBvbiBhIHBsdWdpbiB0aGF0IGFyZSBub3QgY29uc2lkZXJlZCBldmVudHMgKi9cblxudmFyIG5vbkV2ZW50cyA9IFsnbmFtZScsICdFVkVOVFMnLCAnY29uZmlnJywgJ2xvYWRlZCddO1xudmFyIHBsdWdpbkV2ZW50cyA9IHtcbiAgcmVnaXN0ZXJQbHVnaW5UeXBlOiBmdW5jdGlvbiByZWdpc3RlclBsdWdpblR5cGUobmFtZSkge1xuICAgIHJldHVybiBcInJlZ2lzdGVyUGx1Z2luOlwiLmNvbmNhdChuYW1lKTtcbiAgfSxcbiAgcGx1Z2luUmVhZHlUeXBlOiBmdW5jdGlvbiBwbHVnaW5SZWFkeVR5cGUobmFtZSkge1xuICAgIHJldHVybiBcInJlYWR5OlwiLmNvbmNhdChuYW1lKTtcbiAgfVxufTtcbnZhciBFVkVOVFMgPSBjb3JlRXZlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjdXJyKSB7XG4gIGFjY1tjdXJyXSA9IGN1cnI7XG4gIHJldHVybiBhY2M7XG59LCBwbHVnaW5FdmVudHMpO1xudmFyIEVWRU5UUyQxID0gRVZFTlRTO1xuZnVuY3Rpb24gaXNSZXNlcnZlZEFjdGlvbih0eXBlKSB7XG4gIHJldHVybiBjb3JlRXZlbnRzLmluY2x1ZGVzKHR5cGUpO1xufVxuXG52YXIgdXRtUmVnZXggPSAvXnV0bV8vO1xudmFyIHByb3BSZWdleCA9IC9eYW5fcHJvcF8vO1xudmFyIHRyYWl0UmVnZXggPSAvXmFuX3RyYWl0Xy87IC8vIE1pZGRsZXdhcmUgcnVucyBkdXJpbmcgRVZFTlRTLmluaXRpYWxpemVcblxuZnVuY3Rpb24gaW5pdGlhbGl6ZU1pZGRsZXdhcmUoaW5zdGFuY2UpIHtcbiAgdmFyIHNldEl0ZW0gPSBpbnN0YW5jZS5zdG9yYWdlLnNldEl0ZW07XG4gIHJldHVybiBmdW5jdGlvbiAoc3RvcmUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIC8qIEhhbmRsZSBib290c3RyYXAgZXZlbnQgKi9cbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBFVkVOVFMkMS5ib290c3RyYXApIHtcbiAgICAgICAgICB2YXIgcGFyYW1zID0gYWN0aW9uLnBhcmFtcyxcbiAgICAgICAgICAgICAgdXNlciA9IGFjdGlvbi51c2VyLFxuICAgICAgICAgICAgICBwZXJzaXN0ZWRVc2VyID0gYWN0aW9uLnBlcnNpc3RlZFVzZXIsXG4gICAgICAgICAgICAgIGluaXRpYWxVc2VyID0gYWN0aW9uLmluaXRpYWxVc2VyO1xuICAgICAgICAgIHZhciBpc0tub3duSWQgPSBwZXJzaXN0ZWRVc2VyLnVzZXJJZCA9PT0gdXNlci51c2VySWQ7XG4gICAgICAgICAgLyogMS4gU2V0IGFub255bW91cyBJRCAqL1xuXG4gICAgICAgICAgaWYgKHBlcnNpc3RlZFVzZXIuYW5vbnltb3VzSWQgIT09IHVzZXIuYW5vbnltb3VzSWQpIHtcbiAgICAgICAgICAgIHNldEl0ZW0oQU5PTl9JRCwgdXNlci5hbm9ueW1vdXNJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qIDIuIFNldCB1c2VySWQgKi9cblxuXG4gICAgICAgICAgaWYgKCFpc0tub3duSWQpIHtcbiAgICAgICAgICAgIHNldEl0ZW0oVVNFUl9JRCwgdXNlci51c2VySWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvKiAzLiBTZXQgdHJhaXRzIGlmIHRoZXkgYXJlIGRpZmZlcmVudCAqL1xuXG5cbiAgICAgICAgICBpZiAoaW5pdGlhbFVzZXIudHJhaXRzKSB7XG4gICAgICAgICAgICBzZXRJdGVtKFVTRVJfVFJBSVRTLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgaXNLbm93bklkICYmIHBlcnNpc3RlZFVzZXIudHJhaXRzID8gcGVyc2lzdGVkVXNlci50cmFpdHMgOiB7fSksIGluaXRpYWxVc2VyLnRyYWl0cykpO1xuICAgICAgICAgICAgLyogVE9ETyBtdWx0aSB1c2VyIHNldHVwXG4gICAgICAgICAgICBzZXRJdGVtKGAke1VTRVJfVFJBSVRTfS4ke3VzZXIudXNlcklkfWAsIHtcbiAgICAgICAgICAgICAgLi4uKGlzS25vd25JZCkgPyBleGlzdGluZ1RyYWl0cyA6IHt9LFxuICAgICAgICAgICAgICAuLi5pbml0aWFsVXNlci50cmFpdHNcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAqL1xuICAgICAgICAgIH1cbiAgICAgICAgICAvKiA0LiBQYXJzZSB1cmwgcGFyYW1zICovXG5cblxuICAgICAgICAgIHZhciBwYXJhbXNBcnJheSA9IE9iamVjdC5rZXlzKGFjdGlvbi5wYXJhbXMpO1xuXG4gICAgICAgICAgaWYgKHBhcmFtc0FycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGFuX3VpZCA9IHBhcmFtcy5hbl91aWQsXG4gICAgICAgICAgICAgICAgYW5fZXZlbnQgPSBwYXJhbXMuYW5fZXZlbnQ7XG4gICAgICAgICAgICB2YXIgZ3JvdXBlZFBhcmFtcyA9IHBhcmFtc0FycmF5LnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgICAgICAgLy8gbWF0Y2ggdXRtIHBhcmFtcyAmIGRjbGlkIChkaXNwbGF5KSAmIGdjbGlkIChjcGMpXG4gICAgICAgICAgICAgIGlmIChrZXkubWF0Y2godXRtUmVnZXgpIHx8IGtleS5tYXRjaCgvXihkfGcpY2xpZC8pKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsZWFuTmFtZSA9IGtleS5yZXBsYWNlKHV0bVJlZ2V4LCAnJyk7XG4gICAgICAgICAgICAgICAgdmFyIGtleU5hbWUgPSBjbGVhbk5hbWUgPT09ICdjYW1wYWlnbicgPyAnbmFtZScgOiBjbGVhbk5hbWU7XG4gICAgICAgICAgICAgICAgYWNjLmNhbXBhaWduW2tleU5hbWVdID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoa2V5Lm1hdGNoKHByb3BSZWdleCkpIHtcbiAgICAgICAgICAgICAgICBhY2MucHJvcHNba2V5LnJlcGxhY2UocHJvcFJlZ2V4LCAnJyldID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoa2V5Lm1hdGNoKHRyYWl0UmVnZXgpKSB7XG4gICAgICAgICAgICAgICAgYWNjLnRyYWl0c1trZXkucmVwbGFjZSh0cmFpdFJlZ2V4LCAnJyldID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBjYW1wYWlnbjoge30sXG4gICAgICAgICAgICAgIHByb3BzOiB7fSxcbiAgICAgICAgICAgICAgdHJhaXRzOiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdG9yZS5kaXNwYXRjaChfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7XG4gICAgICAgICAgICAgIHR5cGU6IEVWRU5UUyQxLnBhcmFtcyxcbiAgICAgICAgICAgICAgcmF3OiBwYXJhbXNcbiAgICAgICAgICAgIH0sIGdyb3VwZWRQYXJhbXMpLCBhbl91aWQgPyB7XG4gICAgICAgICAgICAgIHVzZXJJZDogYW5fdWlkXG4gICAgICAgICAgICB9IDoge30pKTtcbiAgICAgICAgICAgIC8qIElmIHVzZXJJZCBzZXQsIGNhbGwgaWRlbnRpZnkgKi9cblxuICAgICAgICAgICAgaWYgKGFuX3VpZCkge1xuICAgICAgICAgICAgICAvLyB0aW1lb3V0IHRvIGRlYm91bmNlIGFuZCBtYWtlIHN1cmUgaW50ZWdyYXRpb24gaXMgcmVnaXN0ZXJlZC4gVG9kbyByZWZhY3RvclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuaWRlbnRpZnkoYW5fdWlkLCBncm91cGVkUGFyYW1zLnRyYWl0cyk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogSWYgdHJhY2tpbmcgZXZlbnQgc2V0LCBjYWxsIHRyYWNrICovXG5cblxuICAgICAgICAgICAgaWYgKGFuX2V2ZW50KSB7XG4gICAgICAgICAgICAgIC8vIHRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG1ha2Ugc3VyZSBpbnRlZ3JhdGlvbiBpcyByZWdpc3RlcmVkLiBUb2RvIHJlZmFjdG9yXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS50cmFjayhhbl9ldmVudCwgZ3JvdXBlZFBhcmFtcy5wcm9wcyk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSAvLyBpZiB1cmwgaGFzIHV0bSBwYXJhbXNcblxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoZ3JvdXBlZFBhcmFtcy5jYW1wYWlnbikubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBFVkVOVFMkMS5jYW1wYWlnbixcbiAgICAgICAgICAgICAgICBjYW1wYWlnbjogZ3JvdXBlZFBhcmFtcy5jYW1wYWlnblxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufVxuXG4vKiB1c2VyIHJlZHVjZXIgKi9cblxuZnVuY3Rpb24gdXNlclJlZHVjZXIoc3RvcmFnZSkge1xuICByZXR1cm4gZnVuY3Rpb24gdXNlcigpIHtcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgaWYgKGFjdGlvbi50eXBlID09PSBFVkVOVFMkMS5zZXRJdGVtRW5kKSB7XG4gICAgICAvLyBTZXQgYW5vbnltb3VzSWQgaWYgY2hhbmdlZCBieSBzdG9yYWdlLnNldEl0ZW1cbiAgICAgIGlmIChhY3Rpb24ua2V5ID09PSBBTk9OX0lEKSB7XG4gICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3RhdGUpLCB7XG4gICAgICAgICAgYW5vbnltb3VzSWQ6IGFjdGlvbi52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gU2V0IHVzZXJJZCBpZiBjaGFuZ2VkIGJ5IHN0b3JhZ2Uuc2V0SXRlbVxuXG5cbiAgICAgIGlmIChhY3Rpb24ua2V5ID09PSBVU0VSX0lEKSB7XG4gICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3RhdGUpLCB7XG4gICAgICAgICAgdXNlcklkOiBhY3Rpb24udmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSBFVkVOVFMkMS5pZGVudGlmeTpcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgICAgdXNlcklkOiBhY3Rpb24udXNlcklkLFxuICAgICAgICAgIHRyYWl0czogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHN0YXRlLnRyYWl0cyksIGFjdGlvbi50cmFpdHMpXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlIEVWRU5UUyQxLnJlc2V0OlxuICAgICAgICAvLyBTaWRlIGVmZmVjdCB0byBmaXggcmFjZSBjb25kaXRpb24gaW4gTm9kZS4gVE9ETyByZWZhY3RvclxuICAgICAgICAvLyBUaGlzIGlzIGZyb20gZGVmYXVsdCBzdG9yYWdlLnJlbW92ZUl0ZW06IChrZXkpID0+IGdsb2JhbENvbnRleHRba2V5XSA9IHVuZGVmaW5lZFxuICAgICAgICBbVVNFUl9JRCwgQU5PTl9JRCwgVVNFUl9UUkFJVFNdLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIC8vIHN5bmMgc3RvcmFnZSwgbm90IGluc3RhbmNlLnN0b3JhZ2VcbiAgICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIHVzZXJJZDogbnVsbCxcbiAgICAgICAgICAvLyBUT0RPIHJlc2V0IGFub24gaWQgYXV0b21hdGljYWxseT9cbiAgICAgICAgICBhbm9ueW1vdXNJZDogbnVsbCxcbiAgICAgICAgICB0cmFpdHM6IHt9XG4gICAgICAgIH0pO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGVyc2lzdGVkVXNlckRhdGEoc3RvcmFnZSkge1xuICByZXR1cm4ge1xuICAgIHVzZXJJZDogc3RvcmFnZS5nZXRJdGVtKFVTRVJfSUQpLFxuICAgIGFub255bW91c0lkOiBzdG9yYWdlLmdldEl0ZW0oQU5PTl9JRCksXG4gICAgdHJhaXRzOiBzdG9yYWdlLmdldEl0ZW0oVVNFUl9UUkFJVFMpXG4gIH07XG59XG52YXIgdGVtcEtleSA9IGZ1bmN0aW9uIHRlbXBLZXkoa2V5KSB7XG4gIHJldHVybiBQUkVGSVggKyAnVEVNUCcgKyBQUkVGSVggKyBrZXk7XG59O1xuZnVuY3Rpb24gZ2V0VXNlclByb3BGdW5jKHN0b3JhZ2UpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFVzZXJQcm9wKGtleSwgaW5zdGFuY2UsIHBheWxvYWQpIHtcbiAgICAvKiAxLiBUcnkgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBjdXJyZW50SWQgPSBpbnN0YW5jZS5nZXRTdGF0ZSgndXNlcicpW2tleV07XG5cbiAgICBpZiAoY3VycmVudElkKSB7XG4gICAgICAvKlxuICAgICAgY29uc29sZS5sb2coYGZyb20gc3RhdGUgJHtrZXl9YCwgY3VycmVudElkKVxuICAgICAgLyoqICovXG4gICAgICByZXR1cm4gY3VycmVudElkO1xuICAgIH1cbiAgICAvKiAyLiBUcnkgZXZlbnQgcGF5bG9hZCAqL1xuXG5cbiAgICBpZiAocGF5bG9hZCAmJiBpc09iamVjdChwYXlsb2FkKSAmJiBwYXlsb2FkW2tleV0pIHtcbiAgICAgIC8qXG4gICAgICBjb25zb2xlLmxvZyhgZnJvbSBwYXlsb2FkICR7a2V5fWAsIHBheWxvYWRba2V5XSlcbiAgICAgIC8qKiAqL1xuICAgICAgcmV0dXJuIHBheWxvYWRba2V5XTtcbiAgICB9XG4gICAgLyogMy4gVHJ5IHBlcnNpc3RlZCBkYXRhICovXG5cblxuICAgIHZhciBwZXJzaXN0ZWRJbmZvID0gZ2V0UGVyc2lzdGVkVXNlckRhdGEoc3RvcmFnZSlba2V5XTtcblxuICAgIGlmIChwZXJzaXN0ZWRJbmZvKSB7XG4gICAgICAvKlxuICAgICAgY29uc29sZS5sb2coYGZyb20gcGVyc2lzdGVkSW5mbyAke2tleX1gLCBwZXJzaXN0ZWRJbmZvKVxuICAgICAgLyoqICovXG4gICAgICByZXR1cm4gcGVyc2lzdGVkSW5mbztcbiAgICB9XG4gICAgLyogNC4gRWxzZSwgdHJ5IHRvIGdldCBpbiBtZW1vcnkgcGxhY2Vob2xkZXIuIFRPRE8gd2F0Y2ggdGhpcyBmb3IgZnV0dXJlIGlzc3VlcyAqL1xuXG5cbiAgICByZXR1cm4gZ2V0KHRlbXBLZXkoa2V5KSkgfHwgbnVsbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaWRlbnRpZnlNaWRkbGV3YXJlKGluc3RhbmNlKSB7XG4gIHZhciBfaW5zdGFuY2Ukc3RvcmFnZSA9IGluc3RhbmNlLnN0b3JhZ2UsXG4gICAgICBzZXRJdGVtID0gX2luc3RhbmNlJHN0b3JhZ2Uuc2V0SXRlbSxcbiAgICAgIHJlbW92ZUl0ZW0gPSBfaW5zdGFuY2Ukc3RvcmFnZS5yZW1vdmVJdGVtLFxuICAgICAgZ2V0SXRlbSA9IF9pbnN0YW5jZSRzdG9yYWdlLmdldEl0ZW07XG4gIHJldHVybiBmdW5jdGlvbiAoc3RvcmUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciB1c2VySWQgPSBhY3Rpb24udXNlcklkLFxuICAgICAgICAgICAgdHJhaXRzID0gYWN0aW9uLnRyYWl0cyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBhY3Rpb24ub3B0aW9ucztcbiAgICAgICAgLyogUmVzZXQgdXNlciBpZCBhbmQgdHJhaXRzICovXG5cbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBFVkVOVFMkMS5yZXNldCkge1xuICAgICAgICAgIC8vIFJlbW92ZSBzdG9yZWQgZGF0YVxuICAgICAgICAgIFtVU0VSX0lELCBVU0VSX1RSQUlUUywgQU5PTl9JRF0uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAvLyBGaXJlcyBhc3luYyByZW1vdmVJdGVtIGRpc3BhdGNoXG4gICAgICAgICAgICByZW1vdmVJdGVtKGtleSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgW0lELCBBTk9OSUQsICd0cmFpdHMnXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGdsb2JhbCBjb250ZXh0XG4gICAgICAgICAgICByZW1vdmUodGVtcEtleShrZXkpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gRVZFTlRTJDEuaWRlbnRpZnkpIHtcbiAgICAgICAgICAvKiBJZiBubyBhbm9uIGlkLiBTZXQgaXQhICovXG4gICAgICAgICAgaWYgKCFnZXRJdGVtKEFOT05fSUQpKSB7XG4gICAgICAgICAgICBzZXRJdGVtKEFOT05fSUQsIHV1aWQoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGN1cnJlbnRJZCA9IGdldEl0ZW0oVVNFUl9JRCk7XG4gICAgICAgICAgdmFyIGN1cnJlbnRUcmFpdHMgPSBnZXRJdGVtKFVTRVJfVFJBSVRTKSB8fCB7fTtcblxuICAgICAgICAgIGlmIChjdXJyZW50SWQgJiYgY3VycmVudElkICE9PSB1c2VySWQpIHtcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgdHlwZTogRVZFTlRTJDEudXNlcklkQ2hhbmdlZCxcbiAgICAgICAgICAgICAgb2xkOiB7XG4gICAgICAgICAgICAgICAgdXNlcklkOiBjdXJyZW50SWQsXG4gICAgICAgICAgICAgICAgdHJhaXRzOiBjdXJyZW50VHJhaXRzXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwibmV3XCI6IHtcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHVzZXJJZCxcbiAgICAgICAgICAgICAgICB0cmFpdHM6IHRyYWl0c1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogU2F2ZSB1c2VyIGlkICovXG5cblxuICAgICAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgICAgIHNldEl0ZW0oVVNFUl9JRCwgdXNlcklkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogU2F2ZSB1c2VyIHRyYWl0cyAqL1xuXG5cbiAgICAgICAgICBpZiAodHJhaXRzKSB7XG4gICAgICAgICAgICBzZXRJdGVtKFVTRVJfVFJBSVRTLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgY3VycmVudFRyYWl0cyksIHRyYWl0cykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbnZhciBzdGFjayA9IHt9O1xuXG5mdW5jdGlvbiBydW5DYWxsYmFjayhpZCwgcGF5bG9hZCkge1xuICBpZiAoc3RhY2tbaWRdICYmIGlzRnVuY3Rpb24oc3RhY2tbaWRdKSkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBydW4gJHtpZH1gKVxuICAgIHN0YWNrW2lkXShwYXlsb2FkKTtcbiAgICBkZWxldGUgc3RhY2tbaWRdO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JSZWFkeShkYXRhLCBwcmVkaWNhdGUsIHRpbWVvdXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAocHJlZGljYXRlKCkpIHtcbiAgICAgIHJldHVybiByZXNvbHZlKGRhdGEpO1xuICAgIH0gLy8gVGltZW91dC4gQWRkIHRvIHF1ZXVlXG5cblxuICAgIGlmICh0aW1lb3V0IDwgMSkge1xuICAgICAgcmV0dXJuIHJlamVjdChfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZGF0YSksIHt9LCB7XG4gICAgICAgIHF1ZXVlOiB0cnVlXG4gICAgICB9KSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB9IC8vIEVsc2UgcmVjdXJzaXZlIHJldHJ5XG5cblxuICAgIHJldHVybiBwYXVzZSgxMCkudGhlbihmdW5jdGlvbiAoXykge1xuICAgICAgcmV0dXJuIHdhaXRGb3JSZWFkeShkYXRhLCBwcmVkaWNhdGUsIHRpbWVvdXQgLSAxMCkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGF1c2UobXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1F1ZXVlKHN0b3JlLCBnZXRQbHVnaW5zLCBpbnN0YW5jZSkge1xuICB2YXIgcGx1Z2luTWV0aG9kcyA9IGdldFBsdWdpbnMoKTtcblxuICB2YXIgX3N0b3JlJGdldFN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKSxcbiAgICAgIHBsdWdpbnMgPSBfc3RvcmUkZ2V0U3RhdGUucGx1Z2lucyxcbiAgICAgIGNvbnRleHQgPSBfc3RvcmUkZ2V0U3RhdGUuY29udGV4dCxcbiAgICAgIHF1ZXVlID0gX3N0b3JlJGdldFN0YXRlLnF1ZXVlLFxuICAgICAgdXNlciA9IF9zdG9yZSRnZXRTdGF0ZS51c2VyO1xuXG4gIHZhciBpc09ubGluZSA9ICFjb250ZXh0Lm9mZmxpbmU7XG4gIC8qIElmIG5ldHdvcmsgY29ubmVjdGlvbiBmb3VuZCBhbmQgdGhlcmUgaXMgaXRlbXMgaW4gcXVldWUsIHByb2Nlc3MgdGhlbSBhbGwgKi9cblxuICBpZiAoaXNPbmxpbmUgJiYgcXVldWUgJiYgcXVldWUuYWN0aW9ucyAmJiBxdWV1ZS5hY3Rpb25zLmxlbmd0aCkge1xuICAgIHZhciBwaXBlbGluZSA9IHF1ZXVlLmFjdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGl0ZW0sIGluZGV4KSB7XG4gICAgICB2YXIgaXNMb2FkZWQgPSBwbHVnaW5zW2l0ZW0ucGx1Z2luXS5sb2FkZWQ7XG5cbiAgICAgIGlmIChpc0xvYWRlZCkge1xuICAgICAgICBhY2MucHJvY2Vzcy5wdXNoKGl0ZW0pO1xuICAgICAgICBhY2MucHJvY2Vzc0luZGV4LnB1c2goaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjLnJlcXVldWUucHVzaChpdGVtKTtcbiAgICAgICAgYWNjLnJlcXVldWVJbmRleC5wdXNoKGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7XG4gICAgICBwcm9jZXNzSW5kZXg6IFtdLFxuICAgICAgcHJvY2VzczogW10sXG4gICAgICByZXF1ZXVlOiBbXSxcbiAgICAgIHJlcXVldWVJbmRleDogW11cbiAgICB9KTtcblxuICAgIGlmIChwaXBlbGluZS5wcm9jZXNzSW5kZXggJiYgcGlwZWxpbmUucHJvY2Vzc0luZGV4Lmxlbmd0aCkge1xuICAgICAgcGlwZWxpbmUucHJvY2Vzc0luZGV4LmZvckVhY2goZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgdmFyIHByb2Nlc3NBY3Rpb24gPSBxdWV1ZS5hY3Rpb25zW2ldOyAvLyBjb25zb2xlLmxvZygnUmVQUk9DRVNTIFRISVM+JywgcHJvY2Vzc0FjdGlvbilcbiAgICAgICAgLy8gQ2FsbCBtZXRob2RzIGRpcmVjdGx5IHJpZ2h0IG5vd1xuXG4gICAgICAgIHZhciBjdXJyZW50UGx1Z2luID0gcHJvY2Vzc0FjdGlvbi5wbHVnaW47XG4gICAgICAgIHZhciBjdXJyZW50TWV0aG9kID0gcHJvY2Vzc0FjdGlvbi5wYXlsb2FkLnR5cGU7XG4gICAgICAgIHZhciBtZXRob2QgPSBwbHVnaW5NZXRob2RzW2N1cnJlbnRQbHVnaW5dW2N1cnJlbnRNZXRob2RdO1xuXG4gICAgICAgIGlmIChtZXRob2QgJiYgaXNGdW5jdGlvbihtZXRob2QpKSB7XG4gICAgICAgICAgLyogZW5yaWNoIHF1ZXVlZCBwYXlsb2FkIHdpdGggdXNlcklkIC8gYW5vbiBpZCBpZiBtaXNzaW5nICovXG5cbiAgICAgICAgICAvKiBUT0RPIGhvaXN0IGVucmljaCBpbnRvIHdoZXJlIGFjdGlvbiBxdWV1ZWQ/ICovXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2JlZm9yZScsIHByb2Nlc3NBY3Rpb24ucGF5bG9hZClcbiAgICAgICAgICB2YXIgZW5yaWNoZWRQYXlsb2FkID0gZW5yaWNoKHByb2Nlc3NBY3Rpb24ucGF5bG9hZCwgdXNlcik7IC8vIGNvbnNvbGUubG9nKCd1c2VyLnVzZXJJZCcsIHVzZXIudXNlcklkKVxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd1c2VyLmFub255bW91c0lkJywgdXNlci5hbm9ueW1vdXNJZClcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYWZ0ZXIgZW5yaWNoJywgZW5yaWNoZWRQYXlsb2FkKVxuXG4gICAgICAgICAgbWV0aG9kKHtcbiAgICAgICAgICAgIHBheWxvYWQ6IGVucmljaGVkUGF5bG9hZCxcbiAgICAgICAgICAgIGNvbmZpZzogcGx1Z2luc1tjdXJyZW50UGx1Z2luXS5jb25maWcsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvKiBUaGVuIHJlZGlzcGF0Y2ggZm9yIC5vbiBsaXN0ZW5lcnMgLyBvdGhlciBtaWRkbGV3YXJlICovXG5cbiAgICAgICAgICB2YXIgcGx1Z2luRXZlbnQgPSBcIlwiLmNvbmNhdChjdXJyZW50TWV0aG9kLCBcIjpcIikuY29uY2F0KGN1cnJlbnRQbHVnaW4pO1xuICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBlbnJpY2hlZFBheWxvYWQpLCB7fSwge1xuICAgICAgICAgICAgdHlwZTogcGx1Z2luRXZlbnQsXG5cbiAgICAgICAgICAgIC8qIEludGVybmFsIGRhdGEgZm9yIGFuYWx5dGljcyBlbmdpbmUgKi9cbiAgICAgICAgICAgIF86IHtcbiAgICAgICAgICAgICAgY2FsbGVkOiBwbHVnaW5FdmVudCxcbiAgICAgICAgICAgICAgZnJvbTogJ3F1ZXVlRHJhaW4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8qIFJlbW92ZWQgcHJvY2Vzc2VkIGFjdGlvbnMgKi9cblxuICAgICAgdmFyIHJlUXVldWVBY3Rpb25zID0gcXVldWUuYWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAvLyBub3RlICF+ID09PSByZXR1cm4gcGlwZWxpbmUucHJvY2Vzc0luZGV4LmluZGV4T2YoaW5kZXgpID09PSAtMVxuICAgICAgICByZXR1cm4gIX5waXBlbGluZS5wcm9jZXNzSW5kZXguaW5kZXhPZihpbmRleCk7XG4gICAgICB9KTtcbiAgICAgIC8qIFNldCBxdWV1ZSBhY3Rpb25zLiBUT0RPIHJlZmFjdG9yIHRvIG5vbiBtdXRhdGFibGUgb3IgbW92ZSBvdXQgb2YgcmVkdXggKi9cblxuICAgICAgcXVldWUuYWN0aW9ucyA9IHJlUXVldWVBY3Rpb25zO1xuICAgIH1cbiAgfVxufVxuLyogSGVhcnRiZWF0IHJldHJpZXMgcXVldWVkIGV2ZW50cyAqL1xuXG5mdW5jdGlvbiBoZWFydEJlYXQoc3RvcmUsIGdldFBsdWdpbnMsIGluc3RhbmNlKSB7XG4gIC8vIDNlMyA9PT0gMzAwMCBtc1xuICByZXR1cm4gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwcm9jZXNzUXVldWUoc3RvcmUsIGdldFBsdWdpbnMsIGluc3RhbmNlKTtcbiAgfSwgM2UzKTtcbn0gLy8gQXNzaWduIHVzZXJJZCAmJiBhbm9ueW1vdXNJZCB2YWx1ZXMgaWYgcHJlc2VudCBpbiBwYXlsb2FkIGJ1dCBudWxsXG5cbmZ1bmN0aW9uIGVucmljaCgpIHtcbiAgdmFyIHBheWxvYWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgdXNlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHJldHVybiBbSUQsIEFOT05JRF0ucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgIGlmIChwYXlsb2FkLmhhc093blByb3BlcnR5KGtleSkgJiYgdXNlcltrZXldICYmIHVzZXJba2V5XSAhPT0gcGF5bG9hZFtrZXldKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgJHtrZXl9IHN0YWxlIHVwZGF0ZSB3aXRoICR7dXNlcltrZXldfWApXG4gICAgICBhY2Nba2V5XSA9IHVzZXJba2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBwYXlsb2FkKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcblxuICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcblxuICB2YXIgX3MsIF9lO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpO1xufVxuXG5mdW5jdGlvbiBmaXRsZXJEaXNhYmxlZFBsdWdpbnMoYWxsUGx1Z2lucykge1xuICB2YXIgc2V0dGluZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhhbGxQbHVnaW5zKS5maWx0ZXIoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgZnJvbUNhbGxPcHRpb25zID0gb3B0aW9ucy5wbHVnaW5zIHx8IHt9OyAvLyBJZiBlbmFibGVkL2Rpc2FibGVkIGJ5IG9wdGlvbnMuIE92ZXJyaWRlIHNldHRpbmdzXG5cbiAgICBpZiAoaXNCb29sZWFuKGZyb21DYWxsT3B0aW9uc1tuYW1lXSkpIHtcbiAgICAgIHJldHVybiBmcm9tQ2FsbE9wdGlvbnNbbmFtZV07XG4gICAgfSAvLyBJZiBhbGw6IGZhbHNlIGRpc2FibGUgZXZlcnl0aGluZyB1bmxlc3MgdHJ1ZSBleHBsaWNpdGx5IHNldFxuXG5cbiAgICBpZiAoZnJvbUNhbGxPcHRpb25zLmFsbCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGVsc2UgdXNlIHN0YXRlLnBsdWdpbiBzZXR0aW5nc1xuXG5cbiAgICBpZiAoc2V0dGluZ3NbbmFtZV0gJiYgc2V0dGluZ3NbbmFtZV0uZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSkubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIGFsbFBsdWdpbnNbbmFtZV07XG4gIH0pO1xufVxuXG52YXIgZW5kc1dpdGhTdGFydFJlZ2V4ID0gL1N0YXJ0JC87XG52YXIgYm9vdHN0cmFwUmVnZXggPSAvXmJvb3RzdHJhcC87XG52YXIgcmVhZHlSZWdleCA9IC9ecmVhZHkvO1xuZnVuY3Rpb24gcnVuUGx1Z2lucyAoX3gsIF94MiwgX3gzLCBfeDQsIF94NSkge1xuICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuLyoqXG4gKiBBc3luYyByZWR1Y2Ugb3ZlciBtYXRjaGVkIHBsdWdpbiBtZXRob2RzXG4gKiBGaXJlcyBwbHVnaW4gZnVuY3Rpb25zXG4gKi9cblxuZnVuY3Rpb24gX3JlZigpIHtcbiAgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovcmVnZW5lcmF0b3IubWFyayhmdW5jdGlvbiBfY2FsbGVlKGFjdGlvbiwgZ2V0UGx1Z2lucywgaW5zdGFuY2UsIHN0b3JlLCBldmVudHNJbmZvKSB7XG4gICAgdmFyIHBsdWdpbk9iamVjdCwgb3JpZ2luYWxUeXBlLCB1cGRhdGVkVHlwZSwgc3RhdGUsIGFjdGl2ZVBsdWdpbnMsIGFsbEFjdGl2ZVBsdWdpbktleXMsIGFsbE1hdGNoZXMsIGFjdGlvbkJlZm9yZSwgYWN0aW9uRHVyaW5nLCBhZnRlck5hbWUsIGFjdGlvbkFmdGVyO1xuICAgIHJldHVybiByZWdlbmVyYXRvci53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcGx1Z2luT2JqZWN0ID0gaXNGdW5jdGlvbihnZXRQbHVnaW5zKSA/IGdldFBsdWdpbnMoKSA6IGdldFBsdWdpbnM7XG4gICAgICAgICAgICBvcmlnaW5hbFR5cGUgPSBhY3Rpb24udHlwZTtcbiAgICAgICAgICAgIHVwZGF0ZWRUeXBlID0gb3JpZ2luYWxUeXBlLnJlcGxhY2UoZW5kc1dpdGhTdGFydFJlZ2V4LCAnJyk7XG4gICAgICAgICAgICAvKiBJZiBhY3Rpb24gYWxyZWFkeSBkaXNwYXRjaGVkIGV4aXQgZWFybHkuIFRoaXMgbWFrZXMgaXQgc28gcGx1Z2luIG1ldGhvZHMgYXJlIG5vdCBmaXJlZCB0d2ljZS4gKi9cblxuICAgICAgICAgICAgaWYgKCEoYWN0aW9uLl8gJiYgYWN0aW9uLl8uY2FsbGVkKSkge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgYWN0aW9uKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHN0YXRlID0gaW5zdGFuY2UuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIC8qIFJlbW92ZSBwbHVnaW5zIHRoYXQgYXJlIGRpc2FibGVkIGJ5IG9wdGlvbnMgb3IgYnkgc2V0dGluZ3MgKi9cblxuICAgICAgICAgICAgYWN0aXZlUGx1Z2lucyA9IGZpdGxlckRpc2FibGVkUGx1Z2lucyhwbHVnaW5PYmplY3QsIHN0YXRlLnBsdWdpbnMsIGFjdGlvbi5vcHRpb25zKTtcbiAgICAgICAgICAgIC8qIElmIGFuYWx5dGljcy5wbHVnaW4uZW5hYmxlIGNhbGxzIGRvIHNwZWNpYWwgYmVoYXZpb3IgKi9cblxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsVHlwZSA9PT0gRVZFTlRTJDEuaW5pdGlhbGl6ZVN0YXJ0ICYmIGFjdGlvbi5mcm9tRW5hYmxlKSB7XG4gICAgICAgICAgICAgIC8vIFJldHVybiBsaXN0IG9mIGFsbCBlbmFibGVkIHBsdWdpbnMgdGhhdCBoYXZlIE5PVCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgICAgICAgICAgICBhY3RpdmVQbHVnaW5zID0gT2JqZWN0LmtleXMoc3RhdGUucGx1Z2lucykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGluZm8gPSBzdGF0ZS5wbHVnaW5zW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24ucGx1Z2lucy5pbmNsdWRlcyhuYW1lKSAmJiAhaW5mby5pbml0aWFsaXplZDtcbiAgICAgICAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbk9iamVjdFtuYW1lXTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IC8vIGNvbnNvbGUubG9nKGBlbmdpbmUgYWN0aXZlUGx1Z2lucyAke2FjdGlvbi50eXBlfWAsIGFjdGl2ZVBsdWdpbnMpXG5cblxuICAgICAgICAgICAgYWxsQWN0aXZlUGx1Z2luS2V5cyA9IGFjdGl2ZVBsdWdpbnMubWFwKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwLm5hbWU7XG4gICAgICAgICAgICB9KTsgLy8gY29uc29sZS5sb2coJ2FsbEFjdGl2ZVBsdWdpbktleXMnLCBhbGxBY3RpdmVQbHVnaW5LZXlzKVxuXG4gICAgICAgICAgICBhbGxNYXRjaGVzID0gZ2V0QWxsTWF0Y2hpbmdDYWxscyhvcmlnaW5hbFR5cGUsIGFjdGl2ZVBsdWdpbnMpOyAvLyBjb25zb2xlLmxvZygnYWxsTWF0Y2hlcycsIGFsbE1hdGNoZXMpXG5cbiAgICAgICAgICAgIC8qIEBUT0RPIGNhY2hlIG1hdGNoZXMgYW5kIHB1cmdlIG9uIGVuYWJsZS9kaXNhYmxlL2FkZCBwbHVnaW4gKi9cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBQcm9jZXNzIGFsbCAnYWN0aW9uQmVmb3JlJyBob29rc1xuICAgICAgICAgICAgICogRXhhbXBsZTpcbiAgICAgICAgICAgICAqICBUaGlzIGlzIHByb2Nlc3NlcyAncGFnZVN0YXJ0JyBtZXRob2RzIGZyb20gcGx1Z2lucyBhbmQgdXBkYXRlIHRoZSBldmVudCB0byBzZW5kIHRocm91Z2ggdGhlIGNoYWluXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEyO1xuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NFdmVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXhhY3Q6IGFsbE1hdGNoZXMuYmVmb3JlLFxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZWQ6IGFsbE1hdGNoZXMuYmVmb3JlTlNcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBhbGxQbHVnaW5zOiBwbHVnaW5PYmplY3QsXG4gICAgICAgICAgICAgIGFsbE1hdGNoZXM6IGFsbE1hdGNoZXMsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgc3RvcmU6IHN0b3JlLFxuICAgICAgICAgICAgICBFVkVOVFM6IGV2ZW50c0luZm9cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIGFjdGlvbkJlZm9yZSA9IF9jb250ZXh0LnNlbnQ7XG5cbiAgICAgICAgICAgIGlmICghc2hvdWxkQWJvcnRBbGwoYWN0aW9uQmVmb3JlLCBhbGxBY3RpdmVQbHVnaW5LZXlzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCBhY3Rpb25CZWZvcmUpO1xuXG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIGlmICghKG9yaWdpbmFsVHlwZSA9PT0gdXBkYXRlZFR5cGUpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxOTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qIElmIHR5cGUgdGhlIHNhbWUgZG9uJ3QgZG91YmxlIHByb2Nlc3MgKi9cbiAgICAgICAgICAgIGFjdGlvbkR1cmluZyA9IGFjdGlvbkJlZm9yZTtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyMjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyMTtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzRXZlbnQoe1xuICAgICAgICAgICAgICBhY3Rpb246IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBhY3Rpb25CZWZvcmUpLCB7fSwge1xuICAgICAgICAgICAgICAgIHR5cGU6IHVwZGF0ZWRUeXBlXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXhhY3Q6IGFsbE1hdGNoZXMuZHVyaW5nLFxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZWQ6IGFsbE1hdGNoZXMuZHVyaW5nTlNcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBhbGxQbHVnaW5zOiBwbHVnaW5PYmplY3QsXG4gICAgICAgICAgICAgIGFsbE1hdGNoZXM6IGFsbE1hdGNoZXMsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgc3RvcmU6IHN0b3JlLFxuICAgICAgICAgICAgICBFVkVOVFM6IGV2ZW50c0luZm9cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIGFjdGlvbkR1cmluZyA9IF9jb250ZXh0LnNlbnQ7XG5cbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgaWYgKCFvcmlnaW5hbFR5cGUubWF0Y2goZW5kc1dpdGhTdGFydFJlZ2V4KSkge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhZnRlck5hbWUgPSBcIlwiLmNvbmNhdCh1cGRhdGVkVHlwZSwgXCJFbmRcIik7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjY7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0V2ZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgYWN0aW9uRHVyaW5nKSwge30sIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBhZnRlck5hbWVcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBleGFjdDogYWxsTWF0Y2hlcy5hZnRlcixcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VkOiBhbGxNYXRjaGVzLmFmdGVyTlNcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBhbGxQbHVnaW5zOiBwbHVnaW5PYmplY3QsXG4gICAgICAgICAgICAgIGFsbE1hdGNoZXM6IGFsbE1hdGNoZXMsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgc3RvcmU6IHN0b3JlLFxuICAgICAgICAgICAgICBFVkVOVFM6IGV2ZW50c0luZm9cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgIGFjdGlvbkFmdGVyID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ19fX18gYWN0aW9uQWZ0ZXInLCBhY3Rpb25BZnRlcilcblxuICAgICAgICAgICAgLyogRmlyZSBjYWxsYmFjayBpZiBzdXBwbGllZCAqL1xuICAgICAgICAgICAgaWYgKGFjdGlvbkFmdGVyLm1ldGEgJiYgYWN0aW9uQWZ0ZXIubWV0YS5oYXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRW5kIG9mIGVuZ2luZSBhY3Rpb24gaGFzIGNhbGxiYWNrJylcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYWN0aW9uQWZ0ZXIubWV0YSlcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3N0YWNrJywgc3RhY2spXG4gICAgICAgICAgICAgIC8qKiAqL1xuICAgICAgICAgICAgICAvLyBAVE9ETyBmaWd1cmUgb3V0IGV4YWN0IGFyZ3MgY2FsbHMgYW5kIC5vbiB3aWxsIGdldFxuICAgICAgICAgICAgICBydW5DYWxsYmFjayhhY3Rpb25BZnRlci5tZXRhLnJpZCwge1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGFjdGlvbkFmdGVyXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgYWN0aW9uQmVmb3JlKTtcblxuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUpO1xuICB9KSk7XG4gIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NFdmVudChfeDYpIHtcbiAgcmV0dXJuIF9wcm9jZXNzRXZlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX3Byb2Nlc3NFdmVudCgpIHtcbiAgX3Byb2Nlc3NFdmVudCA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovcmVnZW5lcmF0b3IubWFyayhmdW5jdGlvbiBfY2FsbGVlNShfcmVmMikge1xuICAgIHZhciBkYXRhLCBhY3Rpb24sIGluc3RhbmNlLCBzdGF0ZSwgYWxsUGx1Z2lucywgYWxsTWF0Y2hlcywgc3RvcmUsIEVWRU5UUywgcGx1Z2lucywgY29udGV4dCwgbWV0aG9kLCBpc1N0YXJ0RXZlbnQsIGFib3J0YWJsZSwgbWFrZUFyZ3MsIHF1ZXVlRGF0YSwgcGF5bG9hZHMsIHJlc29sdmVkQWN0aW9uLCBlbmRBY3Rpb247XG4gICAgcmV0dXJuIHJlZ2VuZXJhdG9yLndyYXAoZnVuY3Rpb24gX2NhbGxlZTUkKF9jb250ZXh0NSkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDUucHJldiA9IF9jb250ZXh0NS5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgZGF0YSA9IF9yZWYyLmRhdGEsIGFjdGlvbiA9IF9yZWYyLmFjdGlvbiwgaW5zdGFuY2UgPSBfcmVmMi5pbnN0YW5jZSwgc3RhdGUgPSBfcmVmMi5zdGF0ZSwgYWxsUGx1Z2lucyA9IF9yZWYyLmFsbFBsdWdpbnMsIGFsbE1hdGNoZXMgPSBfcmVmMi5hbGxNYXRjaGVzLCBzdG9yZSA9IF9yZWYyLnN0b3JlLCBFVkVOVFMgPSBfcmVmMi5FVkVOVFM7XG4gICAgICAgICAgICBwbHVnaW5zID0gc3RhdGUucGx1Z2lucywgY29udGV4dCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgICAgICAgICBtZXRob2QgPSBhY3Rpb24udHlwZTtcbiAgICAgICAgICAgIGlzU3RhcnRFdmVudCA9IG1ldGhvZC5tYXRjaChlbmRzV2l0aFN0YXJ0UmVnZXgpOyAvLyBjb25zb2xlLmxvZyhgZGF0YSAke21ldGhvZH1gLCBkYXRhKVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYGRhdGEgYWxsTWF0Y2hlcyAke21ldGhvZH1gLCBhbGxNYXRjaGVzKVxuXG4gICAgICAgICAgICBhYm9ydGFibGUgPSBkYXRhLmV4YWN0Lm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICByZXR1cm4geC5wbHVnaW5OYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvKiBJZiBhYm9ydCBpcyBjYWxsZWQgZnJvbSB4eXpTdGFydCAqL1xuXG4gICAgICAgICAgICBpZiAoaXNTdGFydEV2ZW50KSB7XG4gICAgICAgICAgICAgIGFib3J0YWJsZSA9IGFsbE1hdGNoZXMuZHVyaW5nLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnBsdWdpbk5hbWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogbWFrZSBhcmdzIGZvciBmdW5jdGlvbnMgdG8gY29uY3VtZSAqL1xuXG5cbiAgICAgICAgICAgIG1ha2VBcmdzID0gYXJndW1lbnRGYWN0b3J5KGluc3RhbmNlLCBhYm9ydGFibGUpOyAvLyBjb25zb2xlLmxvZygnbWFrZUFyZ3MnLCBtYWtlQXJncylcblxuICAgICAgICAgICAgLyogQ2hlY2sgaWYgcGx1Z2luIGxvYWRlZCwgaWYgbm90IG1hcmsgYWN0aW9uIGZvciBxdWV1ZSAqL1xuXG4gICAgICAgICAgICBxdWV1ZURhdGEgPSBkYXRhLmV4YWN0LnJlZHVjZShmdW5jdGlvbiAoYWNjLCB0aGluZykge1xuICAgICAgICAgICAgICB2YXIgcGx1Z2luTmFtZSA9IHRoaW5nLnBsdWdpbk5hbWUsXG4gICAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdGhpbmcubWV0aG9kTmFtZTtcbiAgICAgICAgICAgICAgdmFyIGFkZFRvUXVldWUgPSBmYWxzZTsgLy8gUXVldWUgYWN0aW9ucyBpZiBwbHVnaW4gbm90IGxvYWRlZCBleGNlcHQgZm9yIGluaXRpYWxpemUgYW5kIHJlc2V0XG5cbiAgICAgICAgICAgICAgaWYgKCFtZXRob2ROYW1lLm1hdGNoKC9eaW5pdGlhbGl6ZS8pICYmICFtZXRob2ROYW1lLm1hdGNoKC9ecmVzZXQvKSkge1xuICAgICAgICAgICAgICAgIGFkZFRvUXVldWUgPSAhcGx1Z2luc1twbHVnaW5OYW1lXS5sb2FkZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogSWYgb2ZmbGluZSBhbmQgaXRzIGEgY29yZSBtZXRob2QuIEFkZCB0byBxdWV1ZSAqL1xuXG5cbiAgICAgICAgICAgICAgaWYgKGNvbnRleHQub2ZmbGluZSAmJiBtZXRob2ROYW1lLm1hdGNoKC9eKHBhZ2V8dHJhY2t8aWRlbnRpZnkpLykpIHtcbiAgICAgICAgICAgICAgICBhZGRUb1F1ZXVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGFjY1tcIlwiLmNvbmNhdChwbHVnaW5OYW1lKV0gPSBhZGRUb1F1ZXVlO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgLyogZ2VuZXJhdGUgcGx1Z2luIHNwZWNpZmljIHBheWxvYWRzICovXG5cbiAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gMTA7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5leGFjdC5yZWR1Y2UoIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmNiA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovcmVnZW5lcmF0b3IubWFyayhmdW5jdGlvbiBfY2FsbGVlMyhzY29wZWQsIGN1cnIsIGkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGx1Z2luTmFtZSwgY3VyU2NvcGUsIHNjb3BlZFBheWxvYWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2VuZXJhdG9yLndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0Mykge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFtZSA9IGN1cnIucGx1Z2luTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY29wZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJTY29wZSA9IF9jb250ZXh0My5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShkYXRhLm5hbWVzcGFjZWQgJiYgZGF0YS5uYW1lc3BhY2VkW3BsdWdpbk5hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubmFtZXNwYWNlZFtwbHVnaW5OYW1lXS5yZWR1Y2UoIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmNyA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovcmVnZW5lcmF0b3IubWFyayhmdW5jdGlvbiBfY2FsbGVlMihhY2MsIHAsIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1clNjb3BlRGF0YSwgZ2VuQWJvcnQsIHZhbCwgcmV0dXJuVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2VuZXJhdG9yLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuQWJvcnQgPSBmdW5jdGlvbiBfZ2VuQWJvcnQoY3VycmVudEFjdCwgcG5hbWUsIG90aGVyUGx1Zykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHJlYXNvbiwgcGx1Z2lucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsc2l0ZSA9IG90aGVyUGx1ZyB8fCBwbmFtZTsgLy8gY29uc29sZS5sb2coYF9fYWJvcnQgbXNnOiAke3JlYXNvbn1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBfX2Fib3J0ICR7cG5hbWV9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgX19hYm9ydCB4eHg6ICR7cGx1Z2luc31gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBfX2Fib3J0IG90aGVyUGx1Z2AsIG90aGVyUGx1ZylcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBfX2Fib3J0IG1zZzogJHtyZWFzb259YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgX19hYm9ydCAke3BuYW1lfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYF9fYWJvcnQgeHh4OiAke3BsdWdpbnN9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgX19hYm9ydCBvdGhlclBsdWdgLCBvdGhlclBsdWcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjdXJyZW50QWN0KSwge30sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVhc29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zOiBwbHVnaW5zIHx8IFtwbmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlcjogbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBjYWxsc2l0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clNjb3BlRGF0YSA9IF9jb250ZXh0Mi5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghcC5tZXRob2QgfHwgIWlzRnVuY3Rpb24ocC5tZXRob2QpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCBjdXJTY29wZURhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHBsdWdpbnMgZG9u4oCZdCBjYWxsIHRoZW1zZWx2ZXMgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlTWV0aG9kKHAubWV0aG9kTmFtZSwgcC5wbHVnaW5OYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwLm1ldGhvZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGN1clNjb3BlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogZ2VuQWJvcnQoY3VyU2NvcGVEYXRhLCBwbHVnaW5OYW1lLCBwLnBsdWdpbk5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGdldENvbmZpZyhwLnBsdWdpbk5hbWUsIHBsdWdpbnMsIGFsbFBsdWdpbnMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zOiBwbHVnaW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IF9jb250ZXh0Mi5zZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBpc09iamVjdCh2YWwpID8gdmFsIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCBQcm9taXNlLnJlc29sdmUoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGN1clNjb3BlRGF0YSksIHJldHVyblZhbHVlKSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gxMCwgX3gxMSwgX3gxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSgpLCBQcm9taXNlLnJlc29sdmUoYWN0aW9uKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRQYXlsb2FkID0gX2NvbnRleHQzLnNlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBzY29wZWQgcGF5bG9hZCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyU2NvcGVbcGx1Z2luTmFtZV0gPSBzY29wZWRQYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBwYXlsb2FkIGFzIGRlZmF1bHQgYWN0aW9uICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJTY29wZVtwbHVnaW5OYW1lXSA9IGFjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdChcInJldHVyblwiLCBQcm9taXNlLnJlc29sdmUoY3VyU2NvcGUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMyk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94NywgX3g4LCBfeDkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSwgUHJvbWlzZS5yZXNvbHZlKHt9KSk7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgcGF5bG9hZHMgPSBfY29udGV4dDUuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gMTM7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5leGFjdC5yZWR1Y2UoIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmOCA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovcmVnZW5lcmF0b3IubWFyayhmdW5jdGlvbiBfY2FsbGVlNChwcm9taXNlLCBjdXJyLCBpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RMb29wLCBwbHVnaW5OYW1lLCBjdXJyZW50UGx1Z2luLCBjdXJyZW50QWN0aW9uVmFsdWUsIHBheWxvYWRWYWx1ZSwgZnVuY0FyZ3MsIHZhbCwgcmV0dXJuVmFsdWUsIG1lcmdlZCwgc2NvcGVkUGF5bG9hZCwgbmFtZVNwYWNlRXZlbnQsIGFjdGlvbkRlcHRoLCB1cGRhdGVkUGF5bG9hZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVnZW5lcmF0b3Iud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TG9vcCA9IGRhdGEuZXhhY3QubGVuZ3RoID09PSBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWUgPSBjdXJyLnBsdWdpbk5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGx1Z2luID0gYWxsUGx1Z2luc1twbHVnaW5OYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEFjdGlvblZhbHVlID0gX2NvbnRleHQ0LnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkVmFsdWUgPSBwYXlsb2Fkc1twbHVnaW5OYW1lXSA/IHBheWxvYWRzW3BsdWdpbk5hbWVdIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBldmVudFN0YXJ0LCBhbGxvdyBmb3IgdmFsdWUgbWVyZ2luZyAqL1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBldmVudFN0YXJ0LCBhbGxvdyBmb3IgdmFsdWUgbWVyZ2luZyAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RhcnRFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkVmFsdWUgPSBjdXJyZW50QWN0aW9uVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQWJvcnQocGF5bG9hZFZhbHVlLCBwbHVnaW5OYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYD4gQWJvcnQgZnJvbSBwYXlsb2FkIHNwZWNpZmljIFwiJHtwbHVnaW5OYW1lfVwiIGFib3J0IHZhbHVlYCwgcGF5bG9hZFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnREaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHBheWxvYWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFtZTogcGx1Z2luTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IHN0b3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuYWJydXB0KFwicmV0dXJuXCIsIFByb21pc2UucmVzb2x2ZShjdXJyZW50QWN0aW9uVmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZEFib3J0KGN1cnJlbnRBY3Rpb25WYWx1ZSwgcGx1Z2luTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGA+IEFib3J0IGZyb20gJHttZXRob2R9IGFib3J0IHZhbHVlYCwgY3VycmVudEFjdGlvblZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RMb29wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0RGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGN1cnJlbnRBY3Rpb25WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGx1Z2luTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTogc3RvcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuYWJydXB0KFwicmV0dXJuXCIsIFByb21pc2UucmVzb2x2ZShjdXJyZW50QWN0aW9uVmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShxdWV1ZURhdGEuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkgJiYgcXVldWVEYXRhW3BsdWdpbk5hbWVdID09PSB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDE3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1F1ZXVlIHRoaXMgaW5zdGVhZCcsIHBsdWdpbk5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicXVldWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luOiBwbHVnaW5OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkVmFsdWUsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgZGF0YSBmb3IgYW5hbHl0aWNzIGVuZ2luZSAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkOiBcInF1ZXVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogJ3F1ZXVlTWVjaGFuaXNtJyAvLyBmb3IgZGVidWdnaW5nXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LmFicnVwdChcInJldHVyblwiLCBQcm9taXNlLnJlc29sdmUoY3VycmVudEFjdGlvblZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrRm9yTG9hZGVkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gaW5zdGFuY2UuZ2V0U3RhdGUoJ3BsdWdpbnMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcFtjdXJyZW50UGx1Z2luLm5hbWVdLmxvYWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgcCA9IGluc3RhbmNlLmdldFN0YXRlKCdwbHVnaW5zJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBsb2FkZWQgXCIke2N1cnJlbnRQbHVnaW4ubmFtZX1cIiA+ICR7bWV0aG9kfTpgLCBwW2N1cnJlbnRQbHVnaW4ubmFtZV0ubG9hZGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXdhaXQgd2FpdEZvclJlYWR5KGN1cnJlbnRQbHVnaW4sIGNoZWNrRm9yTG9hZGVkLCAxMDAwMCkudGhlbigoZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyhgTG9hZGVkICR7bWV0aG9kfWAsIGN1cnJlbnRQbHVnaW4ubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKGBFcnJvciAke21ldGhvZH0gJHtjdXJyZW50UGx1Z2luLm5hbWV9YCwgZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgLy8gVE9ETyBkaXNwYXRjaCBmYWlsdXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEBUT0RPIGZpZ3VyZSBvdXQgaWYgd2Ugd2FudCBxdWV1aW5nIHNlbWFudGljc1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0FyZ3MgPSBtYWtlQXJncyhwYXlsb2Fkc1twbHVnaW5OYW1lXSwgYWxsUGx1Z2luc1twbHVnaW5OYW1lXSk7IC8vIGNvbnNvbGUubG9nKGBmdW5jQXJncyAke21ldGhvZH0gJHtwbHVnaW5OYW1lfWAsIGZ1bmNBcmdzKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBSdW4gdGhlIHBsdWdpbiBmdW5jdGlvbiAqL1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQbHVnaW5bbWV0aG9kXSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRQbHVnaW46IHBsdWdpbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jQXJncy5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCBpbiBvcmlnaW5hbCBhY3Rpb24gdmFsdWUgb3Igc2NvcGUgcGF5bG9hZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBnZXRDb25maWcocGx1Z2luTmFtZSwgcGx1Z2lucywgYWxsUGx1Z2lucyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnM6IHBsdWdpbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IF9jb250ZXh0NC5zZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBpc09iamVjdCh2YWwpID8gdmFsIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWQgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgY3VycmVudEFjdGlvblZhbHVlKSwgcmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkUGF5bG9hZCA9IHBheWxvYWRzW3BsdWdpbk5hbWVdOyAvLyB8fCBjdXJyZW50QWN0aW9uVmFsdWVcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfHwgY3VycmVudEFjdGlvblZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQWJvcnQoc2NvcGVkUGF5bG9hZCwgcGx1Z2luTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYD4+IEhBTkRMRSBhYm9ydCAke21ldGhvZH0gJHtwbHVnaW5OYW1lfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0RGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHNjb3BlZFBheWxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWU6IHBsdWdpbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IHN0b3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVNwYWNlRXZlbnQgPSBcIlwiLmNvbmNhdChtZXRob2QsIFwiOlwiKS5jb25jYXQocGx1Z2luTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkRlcHRoID0gKG5hbWVTcGFjZUV2ZW50Lm1hdGNoKC86L2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkRlcHRoIDwgMiAmJiAhbWV0aG9kLm1hdGNoKGJvb3RzdHJhcFJlZ2V4KSAmJiAhbWV0aG9kLm1hdGNoKHJlYWR5UmVnZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFBheWxvYWQgPSBpc1N0YXJ0RXZlbnQgPyBtZXJnZWQgOiBwYXlsb2FkVmFsdWU7IC8vIERpc3BhdGNoZWQgZm9yIGAub24oJ3h5eicpIGxpc3RlbmVycy5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpc3BhdGNoZWQgZm9yIGAub24oJ3h5eicpIGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5kaXNwYXRjaChfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgdXBkYXRlZFBheWxvYWQpLCB7fSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogbmFtZVNwYWNlRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZDogbmFtZVNwYWNlRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206ICdzdWJtZXRob2QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IC8vIGNvbnNvbGUubG9nKCdtZXJnZWQnLCBtZXJnZWQpXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hYnJ1cHQoXCJyZXR1cm5cIiwgUHJvbWlzZS5yZXNvbHZlKG1lcmdlZCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU0KTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gxMywgX3gxNCwgX3gxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmOC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSgpLCBQcm9taXNlLnJlc29sdmUoYWN0aW9uKSk7XG5cbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmVzb2x2ZWRBY3Rpb24gPSBfY29udGV4dDUuc2VudDtcblxuICAgICAgICAgICAgaWYgKCEoIW1ldGhvZC5tYXRjaChlbmRzV2l0aFN0YXJ0UmVnZXgpICYmICFtZXRob2QubWF0Y2goL15yZWdpc3RlclBsdWdpbi8pICYmIC8vICFtZXRob2QubWF0Y2goL15kaXNhYmxlUGx1Z2luLykgJiZcbiAgICAgICAgICAgIC8vICFtZXRob2QubWF0Y2goL15lbmFibGVQbHVnaW4vKSAmJlxuICAgICAgICAgICAgIW1ldGhvZC5tYXRjaChyZWFkeVJlZ2V4KSAmJiAhbWV0aG9kLm1hdGNoKGJvb3RzdHJhcFJlZ2V4KSAmJiAhbWV0aG9kLm1hdGNoKC9ecGFyYW1zLykgJiYgIW1ldGhvZC5tYXRjaCgvXnVzZXJJZENoYW5nZWQvKSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAyMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChFVkVOVFMucGx1Z2lucy5pbmNsdWRlcyhtZXRob2QpKSA7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICBWZXJpZnkgdGhpcyBvcmlnaW5hbCBhY3Rpb24gc2V0dXAuXG4gICAgICAgICAgICAgIEl0J3MgaW50ZW5kZWQgdG8ga2VlcCBhY3Rpb25zIGZyb20gZG91YmxlIGRpc3BhdGNoaW5nIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICovXG5cblxuICAgICAgICAgICAgaWYgKCEocmVzb2x2ZWRBY3Rpb24uXyAmJiByZXNvbHZlZEFjdGlvbi5fLm9yaWdpbmFsQWN0aW9uID09PSBtZXRob2QpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gMTg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LmFicnVwdChcInJldHVyblwiLCByZXNvbHZlZEFjdGlvbik7XG5cbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgZW5kQWN0aW9uID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJlc29sdmVkQWN0aW9uKSwge1xuICAgICAgICAgICAgICBfOiB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxBY3Rpb246IHJlc29sdmVkQWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgY2FsbGVkOiByZXNvbHZlZEFjdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgIGZyb206ICdlbmdpbmVFbmQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLyogSWYgYWxsIHBsdWdpbnMgYXJlIGFib3J0ZWQsIGRpc3BhdGNoIHhBYm9ydGVkICovXG5cbiAgICAgICAgICAgIGlmIChzaG91bGRBYm9ydEFsbChyZXNvbHZlZEFjdGlvbiwgZGF0YS5leGFjdC5sZW5ndGgpICYmICFtZXRob2QubWF0Y2goL0VuZCQvKSkge1xuICAgICAgICAgICAgICBlbmRBY3Rpb24gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZW5kQWN0aW9uKSwge1xuICAgICAgICAgICAgICAgIHR5cGU6IHJlc29sdmVkQWN0aW9uLnR5cGUgKyAnQWJvcnRlZCdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKGVuZEFjdGlvbik7XG5cbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5hYnJ1cHQoXCJyZXR1cm5cIiwgcmVzb2x2ZWRBY3Rpb24pO1xuXG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU1KTtcbiAgfSkpO1xuICByZXR1cm4gX3Byb2Nlc3NFdmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBhYm9ydERpc3BhdGNoKF9yZWYzKSB7XG4gIHZhciBkYXRhID0gX3JlZjMuZGF0YSxcbiAgICAgIG1ldGhvZCA9IF9yZWYzLm1ldGhvZDtcbiAgICAgIF9yZWYzLmluc3RhbmNlO1xuICAgICAgdmFyIHBsdWdpbk5hbWUgPSBfcmVmMy5wbHVnaW5OYW1lLFxuICAgICAgc3RvcmUgPSBfcmVmMy5zdG9yZTtcbiAgdmFyIHBvc3RGaXggPSBwbHVnaW5OYW1lID8gJzonICsgcGx1Z2luTmFtZSA6ICcnO1xuICB2YXIgYWJvcnRFdmVudCA9IG1ldGhvZCArICdBYm9ydGVkJyArIHBvc3RGaXg7XG4gIHN0b3JlLmRpc3BhdGNoKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBkYXRhKSwge30sIHtcbiAgICB0eXBlOiBhYm9ydEV2ZW50LFxuICAgIF86IHtcbiAgICAgIGNhbGxlZDogYWJvcnRFdmVudCxcbiAgICAgIGZyb206ICdhYm9ydCdcbiAgICB9XG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29uZmlnKG5hbWUsIHBsdWdpblN0YXRlLCBhbGxQbHVnaW5zKSB7XG4gIHZhciBwbHVnaW5EYXRhID0gcGx1Z2luU3RhdGVbbmFtZV0gfHwgYWxsUGx1Z2luc1tuYW1lXTtcblxuICBpZiAocGx1Z2luRGF0YSAmJiBwbHVnaW5EYXRhLmNvbmZpZykge1xuICAgIHJldHVybiBwbHVnaW5EYXRhLmNvbmZpZztcbiAgfVxuXG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0UGx1Z2luRnVuY3Rpb25zKG1ldGhvZE5hbWUsIHBsdWdpbnMpIHtcbiAgcmV0dXJuIHBsdWdpbnMucmVkdWNlKGZ1bmN0aW9uIChhcnIsIHBsdWdpbikge1xuICAgIHJldHVybiAhcGx1Z2luW21ldGhvZE5hbWVdID8gYXJyIDogYXJyLmNvbmNhdCh7XG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxuICAgICAgcGx1Z2luTmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICBtZXRob2Q6IHBsdWdpblttZXRob2ROYW1lXVxuICAgIH0pO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1ldGhvZCh0eXBlKSB7XG4gIHJldHVybiB0eXBlLnJlcGxhY2UoZW5kc1dpdGhTdGFydFJlZ2V4LCAnJyk7XG59XG4vKipcbiAqIFJldHVybiBhcnJheSBvZiBldmVudCBuYW1lc1xuICogQHBhcmFtICB7U3RyaW5nfSBldmVudFR5cGUgLSBvcmlnaW5hbCBldmVudCB0eXBlXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVzcGFjZSAtIG9wdGlvbmFsIG5hbWVzcGFjZSBwb3N0Zml4XG4gKiBAcmV0dXJuIHthcnJheX0gLSB0eXBlLCBtZXRob2QsIGVuZFxuICovXG5cblxuZnVuY3Rpb24gZ2V0RXZlbnROYW1lcyhldmVudFR5cGUsIG5hbWVzcGFjZSkge1xuICB2YXIgbWV0aG9kID0gZm9ybWF0TWV0aG9kKGV2ZW50VHlwZSk7XG4gIHZhciBwb3N0Rml4ID0gbmFtZXNwYWNlID8gXCI6XCIuY29uY2F0KG5hbWVzcGFjZSkgOiAnJzsgLy8gYHR5cGVTdGFydDpwbHVnaW5OYW1lYFxuXG4gIHZhciB0eXBlID0gXCJcIi5jb25jYXQoZXZlbnRUeXBlKS5jb25jYXQocG9zdEZpeCk7IC8vIGB0eXBlOnBsdWdpbk5hbWVgXG5cbiAgdmFyIG1ldGhvZE5hbWUgPSBcIlwiLmNvbmNhdChtZXRob2QpLmNvbmNhdChwb3N0Rml4KTsgLy8gYHR5cGVFbmQ6cGx1Z2luTmFtZWBcblxuICB2YXIgZW5kID0gXCJcIi5jb25jYXQobWV0aG9kLCBcIkVuZFwiKS5jb25jYXQocG9zdEZpeCk7XG4gIHJldHVybiBbdHlwZSwgbWV0aG9kTmFtZSwgZW5kXTtcbn1cbi8qIENvbGxlY3QgYWxsIGNhbGxzIGZvciBhIGdpdmVuIGV2ZW50IGluIHRoZSBzeXN0ZW0gKi9cblxuXG5mdW5jdGlvbiBnZXRBbGxNYXRjaGluZ0NhbGxzKGV2ZW50VHlwZSwgYWN0aXZlUGx1Z2lucywgYWxsUGx1Z2lucykge1xuICB2YXIgZXZlbnROYW1lcyA9IGdldEV2ZW50TmFtZXMoZXZlbnRUeXBlKTsgLy8gY29uc29sZS5sb2coJ2V2ZW50TmFtZXMnLCBldmVudE5hbWVzKVxuICAvLyAnZXZlbnRTdGFydCcsICdldmVudCcsICYgYGV2ZW50RW5kYFxuXG4gIHZhciBjb3JlID0gZXZlbnROYW1lcy5tYXAoZnVuY3Rpb24gKHdvcmQpIHtcbiAgICByZXR1cm4gZ2V0UGx1Z2luRnVuY3Rpb25zKHdvcmQsIGFjdGl2ZVBsdWdpbnMpO1xuICB9KTsgLy8gR2F0aGVyIG5hbWVTcGFjZWQgRXZlbnRzXG5cbiAgcmV0dXJuIGFjdGl2ZVBsdWdpbnMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsdWdpbikge1xuICAgIHZhciBuYW1lID0gcGx1Z2luLm5hbWU7XG4gICAgdmFyIG5hbWVTcGFjZWRFdmVudHMgPSBnZXRFdmVudE5hbWVzKGV2ZW50VHlwZSwgbmFtZSk7IC8vIGNvbnNvbGUubG9nKCdldmVudE5hbWVzIG5hbWVzcGFjZWQnLCBuYW1lU3BhY2VkRXZlbnRzKVxuXG4gICAgdmFyIF9uYW1lU3BhY2VkRXZlbnRzJG1hcCA9IG5hbWVTcGFjZWRFdmVudHMubWFwKGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICByZXR1cm4gZ2V0UGx1Z2luRnVuY3Rpb25zKHdvcmQsIGFjdGl2ZVBsdWdpbnMpO1xuICAgIH0pLFxuICAgICAgICBfbmFtZVNwYWNlZEV2ZW50cyRtYXAyID0gX3NsaWNlZFRvQXJyYXkoX25hbWVTcGFjZWRFdmVudHMkbWFwLCAzKSxcbiAgICAgICAgYmVmb3JlRnVuY3MgPSBfbmFtZVNwYWNlZEV2ZW50cyRtYXAyWzBdLFxuICAgICAgICBkdXJpbmdGdW5jcyA9IF9uYW1lU3BhY2VkRXZlbnRzJG1hcDJbMV0sXG4gICAgICAgIGFmdGVyRnVuY3MgPSBfbmFtZVNwYWNlZEV2ZW50cyRtYXAyWzJdO1xuXG4gICAgaWYgKGJlZm9yZUZ1bmNzLmxlbmd0aCkge1xuICAgICAgYWNjLmJlZm9yZU5TW25hbWVdID0gYmVmb3JlRnVuY3M7XG4gICAgfVxuXG4gICAgaWYgKGR1cmluZ0Z1bmNzLmxlbmd0aCkge1xuICAgICAgYWNjLmR1cmluZ05TW25hbWVdID0gZHVyaW5nRnVuY3M7XG4gICAgfVxuXG4gICAgaWYgKGFmdGVyRnVuY3MubGVuZ3RoKSB7XG4gICAgICBhY2MuYWZ0ZXJOU1tuYW1lXSA9IGFmdGVyRnVuY3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge1xuICAgIGJlZm9yZTogY29yZVswXSxcbiAgICBiZWZvcmVOUzoge30sXG4gICAgZHVyaW5nOiBjb3JlWzFdLFxuICAgIGR1cmluZ05TOiB7fSxcbiAgICBhZnRlcjogY29yZVsyXSxcbiAgICBhZnRlck5TOiB7fVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQWJvcnQoX3JlZjQsIHBsdWdpbk5hbWUpIHtcbiAgdmFyIGFib3J0ID0gX3JlZjQuYWJvcnQ7XG4gIGlmICghYWJvcnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKGFib3J0ID09PSB0cnVlKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGluY2x1ZGVzKGFib3J0LCBwbHVnaW5OYW1lKSB8fCBhYm9ydCAmJiBpbmNsdWRlcyhhYm9ydC5wbHVnaW5zLCBwbHVnaW5OYW1lKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQWJvcnRBbGwoX3JlZjUsIHBsdWdpbnNDb3VudCkge1xuICB2YXIgYWJvcnQgPSBfcmVmNS5hYm9ydDtcbiAgaWYgKCFhYm9ydCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYWJvcnQgPT09IHRydWUgfHwgaXNTdHJpbmcoYWJvcnQpKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBsdWdpbnMgPSBhYm9ydC5wbHVnaW5zO1xuICByZXR1cm4gaXNBcnJheShhYm9ydCkgJiYgYWJvcnQubGVuZ3RoID09PSBwbHVnaW5zQ291bnQgfHwgaXNBcnJheShwbHVnaW5zKSAmJiBwbHVnaW5zLmxlbmd0aCA9PT0gcGx1Z2luc0NvdW50O1xufVxuXG5mdW5jdGlvbiBpc0FycmF5KGFycikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhhcnIsIG5hbWUpIHtcbiAgaWYgKCFhcnIgfHwgIWlzQXJyYXkoYXJyKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gYXJyLmluY2x1ZGVzKG5hbWUpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhcmd1bWVudHMgdG8gcGFzcyB0byBwbHVnaW4gbWV0aG9kc1xuICogQHBhcmFtICB7T2JqZWN0fSBpbnN0YW5jZSAtIGFuYWx5dGljcyBpbnN0YW5jZVxuICogQHBhcmFtICB7YXJyYXl9IGFib3J0YWJsZVBsdWdpbnMgLSBwbHVnaW5zIHRoYXQgY2FuIGJlIGNhbmNlbGxlZCBieSBjYWxsZXJcbiAqIEByZXR1cm4geyp9IGZ1bmN0aW9uIHRvIGluamVjdCBwbHVnaW4gcGFyYW1zXG4gKi9cblxuXG5mdW5jdGlvbiBhcmd1bWVudEZhY3RvcnkoaW5zdGFuY2UsIGFib3J0YWJsZVBsdWdpbnMpIHtcbiAgLy8gY29uc29sZS5sb2coJ2Fib3J0YWJsZVBsdWdpbnMnLCBhYm9ydGFibGVQbHVnaW5zKVxuICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbiwgcGx1Z2luLCBvdGhlclBsdWdpbikge1xuICAgIHZhciBjb25maWcgPSBwbHVnaW4uY29uZmlnLFxuICAgICAgICBuYW1lID0gcGx1Z2luLm5hbWU7XG4gICAgdmFyIG1ldGhvZCA9IFwiXCIuY29uY2F0KG5hbWUsIFwiLlwiKS5jb25jYXQoYWN0aW9uLnR5cGUpO1xuXG4gICAgaWYgKG90aGVyUGx1Z2luKSB7XG4gICAgICBtZXRob2QgPSBvdGhlclBsdWdpbi5ldmVudDtcbiAgICB9XG5cbiAgICB2YXIgYWJvcnRGID0gYWN0aW9uLnR5cGUubWF0Y2goZW5kc1dpdGhTdGFydFJlZ2V4KSA/IGFib3J0RnVuY3Rpb24obmFtZSwgbWV0aG9kLCBhYm9ydGFibGVQbHVnaW5zLCBvdGhlclBsdWdpbiwgYWN0aW9uKSA6IG5vdEFib3J0YWJsZUVycm9yKGFjdGlvbiwgbWV0aG9kKTtcbiAgICByZXR1cm4ge1xuICAgICAgLyogc2VsZjogcGx1Z2luLCBmb3IgZnV0dXJlIG1heWJlICovXG4gICAgICAvLyBjbG9uZSBvYmplY3RzIHRvIGF2b2lkIHJlYXNzaWduXG4gICAgICBwYXlsb2FkOiBmb3JtYXRQYXlsb2FkKGFjdGlvbiksXG4gICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICBjb25maWc6IGNvbmZpZyB8fCB7fSxcbiAgICAgIGFib3J0OiBhYm9ydEZcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBhYm9ydEZ1bmN0aW9uKHBsdWdpbk5hbWUsIG1ldGhvZCwgYWJvcnRhYmxlUGx1Z2lucywgb3RoZXJQbHVnaW4sIGFjdGlvbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlYXNvbiwgcGx1Z2lucykge1xuICAgIHZhciBjYWxsZXIgPSBvdGhlclBsdWdpbiA/IG90aGVyUGx1Z2luLm5hbWUgOiBwbHVnaW5OYW1lO1xuICAgIHZhciBwbHVnaW5zVG9BYm9ydCA9IHBsdWdpbnMgJiYgaXNBcnJheShwbHVnaW5zKSA/IHBsdWdpbnMgOiBhYm9ydGFibGVQbHVnaW5zO1xuXG4gICAgaWYgKG90aGVyUGx1Z2luKSB7XG4gICAgICBwbHVnaW5zVG9BYm9ydCA9IHBsdWdpbnMgJiYgaXNBcnJheShwbHVnaW5zKSA/IHBsdWdpbnMgOiBbcGx1Z2luTmFtZV07XG5cbiAgICAgIGlmICghcGx1Z2luc1RvQWJvcnQuaW5jbHVkZXMocGx1Z2luTmFtZSkgfHwgcGx1Z2luc1RvQWJvcnQubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBcIi5jb25jYXQobWV0aG9kLCBcIiBjYW4gb25seSBhYm9ydCBcIikuY29uY2F0KHBsdWdpbk5hbWUsIFwiIHBsdWdpbi4gXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShwbHVnaW5zVG9BYm9ydCksIFwiIGlucHV0IHZhbGlkXCIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGFjdGlvbiksIHt9LCB7XG4gICAgICAvLyDwn5SlIHRvZG8gdmVyaWZ5IHRoaXMgbWVyZ2UgaXMgb2tcbiAgICAgIGFib3J0OiB7XG4gICAgICAgIHJlYXNvbjogcmVhc29uLFxuICAgICAgICBwbHVnaW5zOiBwbHVnaW5zVG9BYm9ydCxcbiAgICAgICAgY2FsbGVyOiBtZXRob2QsXG4gICAgICAgIF86IGNhbGxlclxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBub3RBYm9ydGFibGVFcnJvcihhY3Rpb24sIG1ldGhvZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihhY3Rpb24udHlwZSArICcgYWN0aW9uIG5vdCBjYW5jZWxsYWJsZS4gUmVtb3ZlIGFib3J0IGluICcgKyBtZXRob2QpO1xuICB9O1xufVxuLyoqXG4gKiBWZXJpZnkgcGx1Z2luIGlzIG5vdCBjYWxsaW5nIGl0c2VsZiB3aXRoIHdoYXRldmVyOm15UGx1Z2luTmFtZSBzZWxmIHJlZnNcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlTWV0aG9kKGFjdGlvbk5hbWUsIHBsdWdpbk5hbWUpIHtcbiAgdmFyIHRleHQgPSBnZXROYW1lU3BhY2VkQWN0aW9uKGFjdGlvbk5hbWUpO1xuICB2YXIgbWV0aG9kQ2FsbE1hdGNoZXNQbHVnaW5OYW1lc3BhY2UgPSB0ZXh0ICYmIHRleHQubmFtZSA9PT0gcGx1Z2luTmFtZTtcblxuICBpZiAobWV0aG9kQ2FsbE1hdGNoZXNQbHVnaW5OYW1lc3BhY2UpIHtcbiAgICB2YXIgc3ViID0gZ2V0TmFtZVNwYWNlZEFjdGlvbih0ZXh0Lm1ldGhvZCk7XG4gICAgdmFyIHN1YlRleHQgPSBzdWIgPyAnb3IgJyArIHN1Yi5tZXRob2QgOiAnJztcbiAgICB0aHJvdyBuZXcgRXJyb3IoW3BsdWdpbk5hbWUgKyAnIHBsdWdpbiBpcyBjYWxsaW5nIG1ldGhvZCAnICsgYWN0aW9uTmFtZSwgJ1BsdWdpbnMgY2FudCBjYWxsIHNlbGYnLCBcIlVzZSBcIi5jb25jYXQodGV4dC5tZXRob2QsIFwiIFwiKS5jb25jYXQoc3ViVGV4dCwgXCIgaW4gXCIpLmNvbmNhdChwbHVnaW5OYW1lLCBcIiBwbHVnaW4gaW5zdGVhZG9mIFwiKS5jb25jYXQoYWN0aW9uTmFtZSldLmpvaW4oJ1xcbicpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXROYW1lU3BhY2VkQWN0aW9uKGV2ZW50KSB7XG4gIHZhciBzcGxpdCA9IGV2ZW50Lm1hdGNoKC8oLiopOiguKikvKTtcblxuICBpZiAoIXNwbGl0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IHNwbGl0WzFdLFxuICAgIG5hbWU6IHNwbGl0WzJdXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBheWxvYWQoYWN0aW9uKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhhY3Rpb24pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAvLyByZWRhY3QgdHlwZSBmcm9tIHsgcGF5bG9hZCB9XG4gICAgaWYgKGtleSA9PT0gJ3R5cGUnKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdChhY3Rpb25ba2V5XSkpIHtcbiAgICAgIGFjY1trZXldID0gT2JqZWN0LmFzc2lnbih7fSwgYWN0aW9uW2tleV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2Nba2V5XSA9IGFjdGlvbltrZXldO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbi8qXG5mdW5jdGlvbiBnZXRNYXRjaGluZ01ldGhvZHMoZXZlbnRUeXBlLCBhY3RpdmVQbHVnaW5zKSB7XG4gIGNvbnN0IGV4YWN0ID0gZ2V0UGx1Z2luRnVuY3Rpb25zKGV2ZW50VHlwZSwgYWN0aXZlUGx1Z2lucylcbiAgLy8gY29uc29sZS5sb2coJ2V4YWN0JywgZXhhY3QpXG4gIC8vIEdhdGhlciBuYW1lU3BhY2VkIEV2ZW50c1xuICByZXR1cm4gYWN0aXZlUGx1Z2lucy5yZWR1Y2UoKGFjYywgcGx1Z2luKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBwbHVnaW5cbiAgICBjb25zdCBjbGVhbiA9IGdldFBsdWdpbkZ1bmN0aW9ucyhgJHtldmVudFR5cGV9OiR7bmFtZX1gLCBhY3RpdmVQbHVnaW5zKVxuICAgIGlmIChjbGVhbi5sZW5ndGgpIHtcbiAgICAgIGFjYy5uYW1lc3BhY2VkW25hbWVdID0gY2xlYW5cbiAgICB9XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7XG4gICAgZXhhY3Q6IGV4YWN0LFxuICAgIG5hbWVzcGFjZWQ6IHt9XG4gIH0pXG59XG4qL1xuXG5mdW5jdGlvbiBwbHVnaW5NaWRkbGV3YXJlKGluc3RhbmNlLCBnZXRQbHVnaW5zLCBzeXN0ZW1FdmVudHMpIHtcbiAgdmFyIGlzUmVhZHkgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9yZWdlbmVyYXRvci5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoYWN0aW9uKSB7XG4gICAgICAgICAgdmFyIHR5cGUsIGFib3J0LCBwbHVnaW5zLCB1cGRhdGVkQWN0aW9uLCBhbGxQbHVnaW5zLCBwbHVnaW5zQXJyYXksIGFsbFJlZ2lzdGVyZWRQbHVnaW5zLCBjb21wbGV0ZWQsIGZhaWxlZCwgZGlzYWJsZWQsIHdhaXRGb3JQbHVnaW5zVG9Mb2FkLCB1cGRhdGVkO1xuICAgICAgICAgIHJldHVybiByZWdlbmVyYXRvci53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgdHlwZSA9IGFjdGlvbi50eXBlLCBhYm9ydCA9IGFjdGlvbi5hYm9ydCwgcGx1Z2lucyA9IGFjdGlvbi5wbHVnaW5zO1xuICAgICAgICAgICAgICAgICAgdXBkYXRlZEFjdGlvbiA9IGFjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgaWYgKCFhYm9ydCkge1xuICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgbmV4dChhY3Rpb24pKTtcblxuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgIC8qIEFuYWx5dGljcy5wbHVnaW5zLmVuYWJsZSBjYWxsZWQsIHdlIG5lZWQgdG8gaW5pdCB0aGUgcGx1Z2lucyAqL1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEVWRU5UUyQxLmVuYWJsZVBsdWdpbikge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogRVZFTlRTJDEuaW5pdGlhbGl6ZVN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnM6IHBsdWdpbnMsXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgIGZyb21FbmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgbWV0YTogYWN0aW9uLm1ldGFcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBFVkVOVFMkMS5kaXNhYmxlUGx1Z2luKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGNhY2hlZCBjYWxsYmFjaywgcmVzb2x2ZSBwcm9taXNlL3J1biBjYWxsYmFjay4gZGVib3VuY2VkIHRvIGZpeCByYWNlIGNvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuQ2FsbGJhY2soYWN0aW9uLm1ldGEucmlkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvKiBAVE9ETyBpbXBsZW1lbnRcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBFVkVOVFMubG9hZFBsdWdpbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXJ1biBpbml0aWFsaXplIGNhbGxzIGluIHBsdWdpbnNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsUGx1Z2lucyA9IGdldFBsdWdpbnMoKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbHVnaW5zVG9Mb2FkID0gT2JqZWN0LmtleXMoYWxsUGx1Z2lucykuZmlsdGVyKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbnMuaW5jbHVkZXMobmFtZSlcbiAgICAgICAgICAgICAgICAgICAgfSkucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBhY2NbY3Vycl0gPSBhbGxQbHVnaW5zW2N1cnJdXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgICAgICAgICB9LCB7fSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5pdGlhbGl6ZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBFVkVOVFMuaW5pdGlhbGl6ZVN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnM6IHBsdWdpbnNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgcnVuUGx1Z2lucyhpbml0aWFsaXplQWN0aW9uLCBwbHVnaW5zVG9Mb2FkLCBpbnN0YW5jZSwgc3RvcmUsIHN5c3RlbUV2ZW50cylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQodXBkYXRlZClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAvLyAgfHwgdHlwZS5tYXRjaCgvXmluaXRpYWxpemVBYm9ydDovKVxuXG5cbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBFVkVOVFMkMS5pbml0aWFsaXplRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbFBsdWdpbnMgPSBnZXRQbHVnaW5zKCk7XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbnNBcnJheSA9IE9iamVjdC5rZXlzKGFsbFBsdWdpbnMpO1xuICAgICAgICAgICAgICAgICAgICBhbGxSZWdpc3RlcmVkUGx1Z2lucyA9IHBsdWdpbnNBcnJheS5maWx0ZXIoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGx1Z2lucy5pbmNsdWRlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbFBsdWdpbnNbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gW107XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gYWN0aW9uLmRpc2FibGVkOyAvLyBjb25zb2xlLmxvZygnYWxsUmVnaXN0ZXJlZFBsdWdpbnMnLCBhbGxSZWdpc3RlcmVkUGx1Z2lucylcblxuICAgICAgICAgICAgICAgICAgICB3YWl0Rm9yUGx1Z2luc1RvTG9hZCA9IGFsbFJlZ2lzdGVyZWRQbHVnaW5zLm1hcChmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWRlZCA9IHBsdWdpbi5sb2FkZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAvKiBQbHVnaW5zIHdpbGwgYWJvcnQgdHJ5aW5nIHRvIGxvYWQgYWZ0ZXIgMTAgc2Vjb25kcy4gMWU0ID09PSAxMDAwMCBNUyAqL1xuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JSZWFkeShwbHVnaW4sIGxvYWRlZCwgMWU0KS50aGVuKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVhZHlbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBkaXNwYXRjaCBuYW1lc3BhY2VkIHJkeSBvbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBFVkVOVFMkMS5wbHVnaW5SZWFkeVR5cGUobmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYHJlYWR5OiR7bmFtZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IE9iamVjdC5rZXlzKHBsdWdpbikuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW5vbkV2ZW50cy5pbmNsdWRlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWFkeVtuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IGNvbXBsZXRlZC5jb25jYXQobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGx1Z2luOyAvLyBJdCdzIGxvYWRlZCEgcnVuIHRoZSBjb21tYW5kXG4gICAgICAgICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZW91dCBBZGQgdG8gcXVldWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFcnJvciBnZW5lcmljIHdhaXRGb3JSZWFkeS4gUHVzaCB0aGlzIHRvIHF1ZXVlJywgZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBmYWlsZWQuY29uY2F0KGUubmFtZSk7IC8vIEZhaWxlZCB0byBmaXJlLCBhZGQgdG8gcXVldWVcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbCh3YWl0Rm9yUGx1Z2luc1RvTG9hZCkudGhlbihmdW5jdGlvbiAoY2FsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0IHRvIGVuc3VyZSBydW5zIGFmdGVyICdwYWdlJ1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luczogY29tcGxldGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkOiBmYWlsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbnNBcnJheS5sZW5ndGggPT09IHdhaXRGb3JQbHVnaW5zVG9Mb2FkLmxlbmd0aCArIGRpc2FibGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaChfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEVWRU5UUyQxLnJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBwYXlsb2FkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLyogTmV3IHBsdWdpbiBzeXN0ZW0gKi9cblxuXG4gICAgICAgICAgICAgICAgICBpZiAoISh0eXBlICE9PSBFVkVOVFMkMS5ib290c3RyYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmICgvXnJlYWR5OihbXjpdKikkLy50ZXN0KHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEltbWVkaWF0ZWx5IGZsdXNoIHF1ZXVlXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzUXVldWUoc3RvcmUsIGdldFBsdWdpbnMsIGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBydW5QbHVnaW5zKGFjdGlvbiwgZ2V0UGx1Z2lucywgaW5zdGFuY2UsIHN0b3JlLCBzeXN0ZW1FdmVudHMpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCBuZXh0KHVwZGF0ZWQpKTtcblxuICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIG5leHQodXBkYXRlZEFjdGlvbikpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgX2NhbGxlZSk7XG4gICAgICAgIH0pKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94KSB7XG4gICAgICAgICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oKTtcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdG9yYWdlTWlkZGxld2FyZShzdG9yYWdlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RvcmUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciB0eXBlID0gYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICBrZXkgPSBhY3Rpb24ua2V5LFxuICAgICAgICAgICAgdmFsdWUgPSBhY3Rpb24udmFsdWUsXG4gICAgICAgICAgICBvcHRpb25zID0gYWN0aW9uLm9wdGlvbnM7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IEVWRU5UUyQxLnNldEl0ZW0gfHwgdHlwZSA9PT0gRVZFTlRTJDEucmVtb3ZlSXRlbSkge1xuICAgICAgICAgIGlmIChhY3Rpb24uYWJvcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICAgICAgfSAvLyBSdW4gc3RvcmFnZSBzZXQgb3IgcmVtb3ZlXG5cblxuICAgICAgICAgIGlmICh0eXBlID09PSBFVkVOVFMkMS5zZXRJdGVtKSB7XG4gICAgICAgICAgICBzdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JhZ2UucmVtb3ZlSXRlbShrZXksIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG4vKlxuICBUb2RvOiBlbWl0IGV2ZW50cyBmb3Iga2V5cyB3ZSBjYXJlIGFib3V0XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgKGV2ZW50KSA9PiBjb25zb2xlLmxvZyhldmVudCkpO1xuKi9cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbi8qIENsYXNzIHRvIGZpeCBkeW5hbWljIG1pZGRsZXdhcmVzIGZyb20gY29uZmxpY3Rpbmcgd2l0aCBlYWNoIG90aGVyXG5pZiBtb3JlIHRoYW4gb25lIGFuYWx5dGljIGluc3RhbmNlIGlzIGFjdGl2ZSAqL1xuXG52YXIgRHluYW1pY01pZGRsZXdhcmUgPSAvKiNfX1BVUkVfXyovX2NyZWF0ZUNsYXNzKGZ1bmN0aW9uIER5bmFtaWNNaWRkbGV3YXJlKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEeW5hbWljTWlkZGxld2FyZSk7XG5cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiYmVmb3JlXCIsIFtdKTtcblxuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJhZnRlclwiLCBbXSk7XG5cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiYWRkTWlkZGxld2FyZVwiLCBmdW5jdGlvbiAobWlkZGxld2FyZXMsIHBvc2l0aW9uKSB7XG4gICAgX3RoaXNbcG9zaXRpb25dID0gX3RoaXNbcG9zaXRpb25dLmNvbmNhdChtaWRkbGV3YXJlcyk7XG4gIH0pO1xuXG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlbW92ZU1pZGRsZXdhcmVcIiwgZnVuY3Rpb24gKG1pZGRsZXdhcmUsIHBvc2l0aW9uKSB7XG4gICAgdmFyIGluZGV4ID0gX3RoaXNbcG9zaXRpb25dLmZpbmRJbmRleChmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIGQgPT09IG1pZGRsZXdhcmU7XG4gICAgfSk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG4gICAgX3RoaXNbcG9zaXRpb25dID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpc1twb3NpdGlvbl0uc2xpY2UoMCwgaW5kZXgpKSwgX3RvQ29uc3VtYWJsZUFycmF5KF90aGlzW3Bvc2l0aW9uXS5zbGljZShpbmRleCArIDEpKSk7XG4gIH0pO1xuXG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImR5bmFtaWNNaWRkbGV3YXJlc1wiLCBmdW5jdGlvbiAocG9zaXRpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0b3JlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtcbiAgICAgICAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcbiAgICAgICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiBkaXNwYXRjaChhY3QpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKGFjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHZhciBjaGFpbiA9IF90aGlzW3Bvc2l0aW9uXS5tYXAoZnVuY3Rpb24gKG1pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoY2hhaW4pKShuZXh0KShhY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9O1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKGdldFBsdWdpbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHBsdWdpbnMoKSB7XG4gICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG5ld1N0YXRlID0ge307XG5cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICdpbml0aWFsaXplOmFib3J0ZWQnKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKC9ecmVnaXN0ZXJQbHVnaW46KFteOl0qKSQvLnRlc3QoYWN0aW9uLnR5cGUpKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldE5hbWVGcm9tRXZlbnRUeXBlKGFjdGlvbi50eXBlLCAncmVnaXN0ZXJQbHVnaW4nKTtcbiAgICAgIHZhciBwbHVnaW4gPSBnZXRQbHVnaW5zKClbbmFtZV07XG5cbiAgICAgIGlmICghcGx1Z2luIHx8ICFuYW1lKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzRW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkO1xuICAgICAgbmV3U3RhdGVbbmFtZV0gPSB7XG4gICAgICAgIGVuYWJsZWQ6IGlzRW5hYmxlZCxcblxuICAgICAgICAvKiBpZiBubyBpbml0aWFsaXphdGlvbiBtZXRob2QuIFNldCBpbml0aWFsaXplZCB0cnVlICovXG4gICAgICAgIGluaXRpYWxpemVkOiBpc0VuYWJsZWQgPyBCb29sZWFuKCFwbHVnaW4uaW5pdGlhbGl6ZSkgOiBmYWxzZSxcblxuICAgICAgICAvKiBJZiBwbHVnaW4gZW5hYmxlZCA9PT0gZmFsc2UsIHNldCBsb2FkZWQgdG8gZmFsc2UsIGVsc2UgY2hlY2sgcGx1Z2luLmxvYWRlZCBmdW5jdGlvbiAqL1xuICAgICAgICBsb2FkZWQ6IGlzRW5hYmxlZCA/IEJvb2xlYW4ocGx1Z2luLmxvYWRlZCgpKSA6IGZhbHNlLFxuICAgICAgICBjb25maWc6IHBsdWdpbi5jb25maWcgfHwge31cbiAgICAgIH07XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHN0YXRlKSwgbmV3U3RhdGUpO1xuICAgIH1cblxuICAgIGlmICgvXmluaXRpYWxpemU6KFteOl0qKSQvLnRlc3QoYWN0aW9uLnR5cGUpKSB7XG4gICAgICB2YXIgX25hbWUgPSBnZXROYW1lRnJvbUV2ZW50VHlwZShhY3Rpb24udHlwZSwgRVZFTlRTJDEuaW5pdGlhbGl6ZSk7XG5cbiAgICAgIHZhciBfcGx1Z2luID0gZ2V0UGx1Z2lucygpW19uYW1lXTtcblxuICAgICAgaWYgKCFfcGx1Z2luIHx8ICFfbmFtZSkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG5cbiAgICAgIG5ld1N0YXRlW19uYW1lXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdGF0ZVtfbmFtZV0pLCB7XG4gICAgICAgIGluaXRpYWxpemVkOiB0cnVlLFxuXG4gICAgICAgIC8qIGNoZWNrIHBsdWdpbi5sb2FkZWQgZnVuY3Rpb24gKi9cbiAgICAgICAgbG9hZGVkOiBCb29sZWFuKF9wbHVnaW4ubG9hZGVkKCkpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3RhdGUpLCBuZXdTdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKC9ecmVhZHk6KFteOl0qKSQvLnRlc3QoYWN0aW9uLnR5cGUpKSB7XG4gICAgICAvLyBjb25zdCBuYW1lID0gZ2V0TmFtZUZyb21FdmVudFR5cGUoYWN0aW9uLnR5cGUsICdyZWFkeScpXG4gICAgICBuZXdTdGF0ZVthY3Rpb24ubmFtZV0gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3RhdGVbYWN0aW9uLm5hbWVdKSwge1xuICAgICAgICBsb2FkZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdGF0ZSksIG5ld1N0YXRlKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAvKiBjYXNlIEVWRU5UUy5wbHVnaW5GYWlsZWQ6XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdQTFVHSU5fRkFJTEVEJywgYWN0aW9uLm5hbWUpXG4gICAgICAgIG5ld1N0YXRlW2FjdGlvbi5uYW1lXSA9IHtcbiAgICAgICAgICAuLi5zdGF0ZVthY3Rpb24ubmFtZV0sXG4gICAgICAgICAgLi4ueyBsb2FkZWQ6IGZhbHNlIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ubmV3U3RhdGUgfVxuICAgICAgKi9cblxuICAgICAgLyogV2hlbiBhbmFseXRpY3MucGx1Z2lucy5kaXNhYmxlIGNhbGxlZCAqL1xuICAgICAgY2FzZSBFVkVOVFMkMS5kaXNhYmxlUGx1Z2luOlxuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHN0YXRlKSwgdG9nZ2xlUGx1Z2luU3RhdHVzKGFjdGlvbi5wbHVnaW5zLCBmYWxzZSwgc3RhdGUpKTtcblxuICAgICAgLyogV2hlbiBhbmFseXRpY3MucGx1Z2lucy5lbmFibGUgY2FsbGVkICovXG5cbiAgICAgIGNhc2UgRVZFTlRTJDEuZW5hYmxlUGx1Z2luOlxuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHN0YXRlKSwgdG9nZ2xlUGx1Z2luU3RhdHVzKGFjdGlvbi5wbHVnaW5zLCB0cnVlLCBzdGF0ZSkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXROYW1lRnJvbUV2ZW50VHlwZSh0eXBlLCBiYXNlTmFtZSkge1xuICByZXR1cm4gdHlwZS5zdWJzdHJpbmcoYmFzZU5hbWUubGVuZ3RoICsgMSwgdHlwZS5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVQbHVnaW5TdGF0dXMocGx1Z2lucywgc3RhdHVzLCBjdXJyZW50U3RhdGUpIHtcbiAgcmV0dXJuIHBsdWdpbnMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsdWdpbktleSkge1xuICAgIGFjY1twbHVnaW5LZXldID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGN1cnJlbnRTdGF0ZVtwbHVnaW5LZXldKSwge1xuICAgICAgZW5hYmxlZDogc3RhdHVzXG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgY3VycmVudFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplKG9iaikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xuICB9IGNhdGNoIChlcnIpIHt9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxudmFyIGluaXRpYWxTdGF0ZSQzID0ge1xuICBsYXN0OiB7fSxcbiAgaGlzdG9yeTogW11cbn07IC8vIHRyYWNrIHJlZHVjZXJcblxuZnVuY3Rpb24gdHJhY2tSZWR1Y2VyKCkge1xuICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGluaXRpYWxTdGF0ZSQzO1xuICB2YXIgYWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciB0eXBlID0gYWN0aW9uLnR5cGUsXG4gICAgICBldmVudCA9IGFjdGlvbi5ldmVudCxcbiAgICAgIHByb3BlcnRpZXMgPSBhY3Rpb24ucHJvcGVydGllcyxcbiAgICAgIG9wdGlvbnMgPSBhY3Rpb24ub3B0aW9ucyxcbiAgICAgIG1ldGEgPSBhY3Rpb24ubWV0YTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEVWRU5UUyQxLnRyYWNrOlxuICAgICAgdmFyIHRyYWNrRXZlbnQgPSBzZXJpYWxpemUoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXNcbiAgICAgIH0sIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCAmJiB7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pLCB7fSwge1xuICAgICAgICBtZXRhOiBtZXRhXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHN0YXRlKSwge1xuICAgICAgICBsYXN0OiB0cmFja0V2ZW50LFxuICAgICAgICAvLyBUb2RvIHByZXZlbnQgTEFSR0UgYXJyYXlzIGh0dHBzOi8vYml0Lmx5LzJNbkJ3UFRcbiAgICAgICAgaGlzdG9yeTogc3RhdGUuaGlzdG9yeS5jb25jYXQodHJhY2tFdmVudClcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG4vKlxuVE9ETyBmaWd1cmUgb3V0IGlmIHRoaXMgc2hvdWxkIGxpdmUgaW4gc3RhdGUuLi5cblF1ZXVlIGNvdWxkIGJlIGluIG1lcm1vcnkgYXMgd2VsbC5cbkJ1dCBhbHNvIG5lZWRzIHRvIGJlIHBlcnNpc3RlZCB0byBzdG9yYWdlXG4qL1xuXG52YXIgaW5pdGlhbFN0YXRlJDIgPSB7XG4gIGFjdGlvbnM6IFtdXG59O1xuZnVuY3Rpb24gcXVldWVSZWR1Y2VyKCkge1xuICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGluaXRpYWxTdGF0ZSQyO1xuICB2YXIgYWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciB0eXBlID0gYWN0aW9uLnR5cGUsXG4gICAgICBwYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAncXVldWUnOlxuICAgICAgdmFyIGFjdGlvbkNoYWluO1xuICAgICAgLyogcHJpb3JpdGl6ZSBpZGVudGlmeSBpbiBldmVudCBxdWV1ZSAqL1xuXG4gICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnR5cGUgJiYgcGF5bG9hZC50eXBlID09PSBFVkVOVFMkMS5pZGVudGlmeSkge1xuICAgICAgICBhY3Rpb25DaGFpbiA9IFthY3Rpb25dLmNvbmNhdChzdGF0ZS5hY3Rpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbkNoYWluID0gc3RhdGUuYWN0aW9ucy5jb25jYXQoYWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdGF0ZSksIHt9LCB7XG4gICAgICAgIGFjdGlvbnM6IGFjdGlvbkNoYWluXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2RlcXVldWUnOlxuICAgICAgcmV0dXJuIFtdO1xuICAgIC8vIHRvZG8gcHVzaCBldmVudHMgdG8gaGlzdG9yeVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG52YXIgaGFzaFJlZ2V4ID0gLyMuKiQvO1xuXG5mdW5jdGlvbiBjYW5vbmljYWxVcmwoKSB7XG4gIGlmICghaXNCcm93c2VyKSByZXR1cm47XG4gIHZhciB0YWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKTtcblxuICBmb3IgKHZhciBpID0gMCwgdGFnOyB0YWcgPSB0YWdzW2ldOyBpKyspIHtcbiAgICBpZiAodGFnLmdldEF0dHJpYnV0ZSgncmVsJykgPT09ICdjYW5vbmljYWwnKSB7XG4gICAgICByZXR1cm4gdGFnLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cmxQYXRoKHVybCkge1xuICB2YXIgcmVnZXggPSAvKGh0dHBbc10/OlxcL1xcLyk/KFteXFwvXFxzXStcXC8pKC4qKS9nO1xuICB2YXIgbWF0Y2hlcyA9IHJlZ2V4LmV4ZWModXJsKTtcbiAgdmFyIHBhdGhNYXRjaCA9IG1hdGNoZXMgJiYgbWF0Y2hlc1szXSA/IG1hdGNoZXNbM10uc3BsaXQoJz8nKVswXS5yZXBsYWNlKGhhc2hSZWdleCwgJycpIDogJyc7XG4gIHJldHVybiAnLycgKyBwYXRoTWF0Y2g7XG59XG4vKipcbiAqIFJldHVybiB0aGUgY2Fub25pY2FsIFVSTCBhbmQgcm1vdmUgdGhlIGhhc2guXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHNlYXJjaCAtIHNlYXJjaCBwYXJhbVxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm4gY3VycmVudCBjYW5vbmljYWwgVVJMXG4gKi9cblxuXG5mdW5jdGlvbiBjdXJyZW50VXJsKHNlYXJjaCkge1xuICB2YXIgY2Fub25pY2FsID0gY2Fub25pY2FsVXJsKCk7XG4gIGlmICghY2Fub25pY2FsKSByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZShoYXNoUmVnZXgsICcnKTtcbiAgcmV0dXJuIGNhbm9uaWNhbC5tYXRjaCgvXFw/LykgPyBjYW5vbmljYWwgOiBjYW5vbmljYWwgKyBzZWFyY2g7XG59XG4vKipcbiAqIFBhZ2UgZGF0YSBmb3Igb3ZlcmlkZXNcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBhZ2VEYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3RpdGxlXSAtIFBhZ2UgdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXJsXSAtIFBhZ2UgdXJsXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BhdGhdIC0gUGFnZSBwYXRoXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlYXJjaF0gLSBQYWdlIHNlYXJjaFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt3aWR0aF0gLSBQYWdlIHdpZHRoXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hlaWdodF0gLSBQYWdlIGhlaWdodFxuKi9cblxuLyoqXG4gKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBwYWdlXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IGdldFBhZ2VEYXRhXG4gKiBAcGFyYW0gIHtQYWdlRGF0YX0gW3BhZ2VEYXRhID0ge31dIC0gUGFnZSBkYXRhIG92ZXJpZGVzXG4gKiBAcmV0dXJuIHtQYWdlRGF0YX0gcmVzb2x2ZWQgcGFnZSBkYXRhXG4gKi9cblxuXG52YXIgZ2V0UGFnZURhdGEgPSBmdW5jdGlvbiBnZXRQYWdlRGF0YSgpIHtcbiAgdmFyIHBhZ2VEYXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgaWYgKCFpc0Jyb3dzZXIpIHJldHVybiBwYWdlRGF0YTtcbiAgdmFyIF9kb2N1bWVudCA9IGRvY3VtZW50LFxuICAgICAgdGl0bGUgPSBfZG9jdW1lbnQudGl0bGUsXG4gICAgICByZWZlcnJlciA9IF9kb2N1bWVudC5yZWZlcnJlcjtcbiAgdmFyIF93aW5kb3cgPSB3aW5kb3csXG4gICAgICBsb2NhdGlvbiA9IF93aW5kb3cubG9jYXRpb24sXG4gICAgICBpbm5lcldpZHRoID0gX3dpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgaW5uZXJIZWlnaHQgPSBfd2luZG93LmlubmVySGVpZ2h0O1xuICB2YXIgaGFzaCA9IGxvY2F0aW9uLmhhc2gsXG4gICAgICBzZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2g7XG4gIHZhciB1cmwgPSBjdXJyZW50VXJsKHNlYXJjaCk7XG4gIHZhciBwYWdlID0ge1xuICAgIHRpdGxlOiB0aXRsZSxcbiAgICB1cmw6IHVybCxcbiAgICBwYXRoOiB1cmxQYXRoKHVybCksXG4gICAgaGFzaDogaGFzaCxcbiAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICB3aWR0aDogaW5uZXJXaWR0aCxcbiAgICBoZWlnaHQ6IGlubmVySGVpZ2h0XG4gIH07XG5cbiAgaWYgKHJlZmVycmVyICYmIHJlZmVycmVyICE9PSAnJykge1xuICAgIHBhZ2UucmVmZXJyZXIgPSByZWZlcnJlcjtcbiAgfVxuXG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcGFnZSksIHBhZ2VEYXRhKTtcbn07XG52YXIgaW5pdGlhbFN0YXRlJDEgPSB7XG4gIGxhc3Q6IHt9LFxuICBoaXN0b3J5OiBbXVxufTsgLy8gcGFnZSByZWR1Y2VyXG5cbmZ1bmN0aW9uIHBhZ2UoKSB7XG4gIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogaW5pdGlhbFN0YXRlJDE7XG4gIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHByb3BlcnRpZXMgPSBhY3Rpb24ucHJvcGVydGllcyxcbiAgICAgIG9wdGlvbnMgPSBhY3Rpb24ub3B0aW9ucyxcbiAgICAgIG1ldGEgPSBhY3Rpb24ubWV0YTtcblxuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBFVkVOVFMkMS5wYWdlOlxuICAgICAgdmFyIHZpZXdEYXRhID0gc2VyaWFsaXplKF9vYmplY3RTcHJlYWQyKHtcbiAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyxcbiAgICAgICAgbWV0YTogbWV0YVxuICAgICAgfSwgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoICYmIHtcbiAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdGF0ZSksIHtcbiAgICAgICAgbGFzdDogdmlld0RhdGEsXG4gICAgICAgIC8vIFRvZG8gcHJldmVudCBMQVJHRSBhcnJheXMgaHR0cHM6Ly9iaXQubHkvMk1uQndQVFxuICAgICAgICBoaXN0b3J5OiBzdGF0ZS5oaXN0b3J5LmNvbmNhdCh2aWV3RGF0YSlcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRCcm93c2VyT1MoKSB7XG4gIGlmICghaXNCcm93c2VyKSByZXR1cm4gZmFsc2U7XG4gIHZhciBvcyA9IG5hdmlnYXRvci5hcHBWZXJzaW9uOyAvLyB+b3MgYml0d2lzZSBvcGVyYXRvciB0byBjaGVjayBpZiBpbiBuYXZpZ2F0b3JcblxuICBpZiAofm9zLmluZGV4T2YoJ1dpbicpKSByZXR1cm4gJ1dpbmRvd3MnO1xuICBpZiAofm9zLmluZGV4T2YoJ01hYycpKSByZXR1cm4gJ01hY09TJztcbiAgaWYgKH5vcy5pbmRleE9mKCdYMTEnKSkgcmV0dXJuICdVTklYJztcbiAgaWYgKH5vcy5pbmRleE9mKCdMaW51eCcpKSByZXR1cm4gJ0xpbnV4JzsgLy8gZGVmYXVsdFxuXG4gIHJldHVybiAnVW5rbm93biBPUyc7XG59XG5cbnZhciBvc05hbWU7XG52YXIgcmVmZXJyZXI7XG52YXIgbG9jYWxlO1xudmFyIHRpbWVab25lO1xuXG57XG4gIG9zTmFtZSA9IGdldEJyb3dzZXJPUygpO1xuICByZWZlcnJlciA9IGlzQnJvd3NlciA/IGRvY3VtZW50LnJlZmVycmVyIDogbnVsbDtcbiAgbG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSgpO1xuICB0aW1lWm9uZSA9IGdldFRpbWVab25lKCk7XG59XG5cbnZhciBpbml0aWFsU3RhdGUgPSB7XG4gIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgc2Vzc2lvbklkOiB1dWlkKCksXG4gIGFwcDogbnVsbCxcbiAgdmVyc2lvbjogbnVsbCxcbiAgZGVidWc6IGZhbHNlLFxuICBvZmZsaW5lOiBpc0Jyb3dzZXIgPyAhbmF2aWdhdG9yLm9uTGluZSA6IGZhbHNlLFxuICAvLyB1c2Ugbm9kZSBuZXR3b3JrIGlzLW9ubGluZVxuICBvczoge1xuICAgIG5hbWU6IG9zTmFtZVxuICB9LFxuICB1c2VyQWdlbnQ6IGlzQnJvd3NlciA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAnbm9kZScsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wbGF0Zm9ybS5qc1xuICBsaWJyYXJ5OiB7XG4gICAgbmFtZTogTElCX05BTUUsXG4gICAgLy8gVE9ETyBmaXggdmVyc2lvbiBudW1iZXIuIG5wbSBydW4gcHVibGlzaDpwYXRjaCBoYXMgd3JvbmcgdmVyc2lvblxuICAgIHZlcnNpb246IFwiMC4xMC4yMlwiXG4gIH0sXG4gIHRpbWV6b25lOiB0aW1lWm9uZSxcbiAgbG9jYWxlOiBsb2NhbGUsXG4gIGNhbXBhaWduOiB7fSxcbiAgcmVmZXJyZXI6IHJlZmVycmVyXG59OyAvLyBjb250ZXh0IHJlZHVjZXJcblxuZnVuY3Rpb24gY29udGV4dCgpIHtcbiAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBpbml0aWFsU3RhdGU7XG4gIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGluaXRpYWxpemVkID0gc3RhdGUuaW5pdGlhbGl6ZWQ7XG4gIHZhciB0eXBlID0gYWN0aW9uLnR5cGUsXG4gICAgICBjYW1wYWlnbiA9IGFjdGlvbi5jYW1wYWlnbjtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEVWRU5UUyQxLmNhbXBhaWduOlxuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdGF0ZSksIHtcbiAgICAgICAgY2FtcGFpZ246IGNhbXBhaWduXG4gICAgICB9KTtcblxuICAgIGNhc2UgRVZFTlRTJDEub2ZmbGluZTpcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3RhdGUpLCB7XG4gICAgICAgIG9mZmxpbmU6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBFVkVOVFMkMS5vbmxpbmU6XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHN0YXRlKSwge1xuICAgICAgICBvZmZsaW5lOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGluaXRpYWxTdGF0ZSksIHN0YXRlKSwge1xuICAgICAgICAgIGluaXRpYWxpemVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbnZhciBleGNsdWRlSXRlbXMgPSBbJ3BsdWdpbnMnLCAncmVkdWNlcnMnLCAnc3RvcmFnZSddOyAvLyBQdWxsIHBsdWdpbnMgYW5kIHJlZHVjZXJzIG9mZiBpbnRpdGFsIGNvbmZpZ1xuXG5mdW5jdGlvbiBtYWtlQ29udGV4dChjb25maWcpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnJlbnQpIHtcbiAgICBpZiAoZXhjbHVkZUl0ZW1zLmluY2x1ZGVzKGN1cnJlbnQpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGFjY1tjdXJyZW50XSA9IGNvbmZpZ1tjdXJyZW50XTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlbihldmVudHMsIGZ1bmMsIHRvQWRkKSB7XG4gIGlmICghaXNCcm93c2VyKSByZXR1cm47XG4gIHZhciBmbiA9IHdpbmRvd1sodG9BZGQgPyAnYWRkJyA6ICdyZW1vdmUnKSArICdFdmVudExpc3RlbmVyJ107XG4gIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGV2KSB7XG4gICAgZm4oZXYsIGZ1bmMpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2soKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoIW5hdmlnYXRvci5vbkxpbmUpO1xufVxuZnVuY3Rpb24gd2F0Y2goY2IpIHtcbiAgdmFyIGZuID0gZnVuY3Rpb24gZm4oXykge1xuICAgIHJldHVybiBjaGVjaygpLnRoZW4oY2IpO1xuICB9O1xuXG4gIHZhciBsaXN0ZW5lciA9IGxpc3Rlbi5iaW5kKG51bGwsICdvbmxpbmUgb2ZmbGluZScsIGZuKTtcbiAgbGlzdGVuZXIodHJ1ZSk7IC8vIHJldHVybiB1bnN1YnNjcmliZSBmdW5jdGlvblxuXG4gIHJldHVybiBmdW5jdGlvbiAoXykge1xuICAgIHJldHVybiBsaXN0ZW5lcihmYWxzZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIERlYnVnKCkge1xuICAvLyBHbG9iYWwga2V5IGlzIHdpbmRvdy5fX2dsb2JhbF9fLmFuYWx5dGljc1xuICBzZXQoTElCX05BTUUsIFtdKTsgLy8gUmV0dXJuIGRlYnVnZ2VyXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKSB7XG4gICAgICB2YXIgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpO1xuICAgICAgdmFyIG9yaWdEaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xuXG4gICAgICB2YXIgZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGEgPSBhY3Rpb24uYWN0aW9uIHx8IGFjdGlvbjtcbiAgICAgICAgZ2xvYmFsQ29udGV4dFtLRVldW0xJQl9OQU1FXS5wdXNoKGEpO1xuICAgICAgICByZXR1cm4gb3JpZ0Rpc3BhdGNoKGFjdGlvbik7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdG9yZSwge1xuICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5mdW5jdGlvbiBjb21wb3NlV2l0aERlYnVnKGNvbmZpZykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb21wb3NlKGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKSwgRGVidWcoKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUFycmF5KHNpbmdsZU9yQXJyYXkpIHtcbiAgaWYgKCFzaW5nbGVPckFycmF5KSByZXR1cm4gW107XG4gIGlmIChpc0FycmF5JDEoc2luZ2xlT3JBcnJheSkpIHJldHVybiBzaW5nbGVPckFycmF5O1xuICByZXR1cm4gW3NpbmdsZU9yQXJyYXldO1xufVxuXG4vKipcbiAqIEdyYWIgZmlyc3QgZnVuY3Rpb24gZm91bmQgZnJvbSBhcmd1bWVudHNcbiAqIEBwYXJhbSB7YXJyYXl9IFthcmdBcnJheV0gLSBhcmd1bWVudHMgYXJyYXkgdG8gZmluZCBmaXJzdCBmdW5jdGlvblxuICogQHJldHVybnMge0Z1bmN0aW9ufHVuZGVmaW5lZH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRDYWxsYmFja0Zyb21BcmdzKGFyZ0FycmF5KSB7XG4gIHZhciBhcmdzID0gYXJnQXJyYXkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgdmFyIGNiO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGFyZ3NbaV0pKSB7XG4gICAgICBjYiA9IGFyZ3NbaV07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2I7XG59XG5cbmZ1bmN0aW9uIHRpbWVTdGFtcCgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xufVxuXG5mdW5jdGlvbiBkZWZlcnJlZFByb21pc2VSZXNvbHZlcihyZXNvbHZlciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhkYXRhKTtcbiAgICByZXNvbHZlcihkYXRhKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVNZXRhKCkge1xuICB2YXIgbWV0YSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciByZXNvbHZlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBwb3NzaWJsZUNhbGxiYWNrcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgcmlkID0gdXVpZCgpO1xuXG4gIGlmIChyZXNvbHZlKSB7XG4gICAgLy8gc3RhY2tbYCR7cmlkfS1pbmZvYF0gPSBtZXRhXG4gICAgc3RhY2tbcmlkXSA9IGRlZmVycmVkUHJvbWlzZVJlc29sdmVyKHJlc29sdmUsIGdldENhbGxiYWNrRnJvbUFyZ3MocG9zc2libGVDYWxsYmFja3MpKTtcbiAgfVxuXG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWV0YSksIHt9LCB7XG4gICAgcmlkOiByaWQsXG4gICAgdHM6IHRpbWVTdGFtcCgpXG4gIH0sICFyZXNvbHZlID8ge30gOiB7XG4gICAgaGFzQ2FsbGJhY2s6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogQW5hbHl0aWNzIGxpYnJhcnkgY29uZmlndXJhdGlvblxuICpcbiAqIEFmdGVyIHRoZSBsaWJyYXJ5IGlzIGluaXRpYWxpemVkIHdpdGggY29uZmlnLCB0aGUgY29yZSBBUEkgaXMgZXhwb3NlZCAmIHJlYWR5IGZvciB1c2UgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBhbmFseXRpY3MgY29yZSBjb25maWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29uZmlnLmFwcF0gLSBOYW1lIG9mIHNpdGUgLyBhcHBcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29uZmlnLnZlcnNpb25dIC0gVmVyc2lvbiBvZiB5b3VyIGFwcFxuICogQHBhcmFtIHtib29sZWFufSBbY29uZmlnLmRlYnVnXSAtIFNob3VsZCBhbmFseXRpY3MgcnVuIGluIGRlYnVnIG1vZGVcbiAqIEBwYXJhbSB7QXJyYXkuPEFuYWx5dGljc1BsdWdpbj59ICBbY29uZmlnLnBsdWdpbnNdIC0gQXJyYXkgb2YgYW5hbHl0aWNzIHBsdWdpbnNcbiAqIEByZXR1cm4ge0FuYWx5dGljc0luc3RhbmNlfSBBbmFseXRpY3MgSW5zdGFuY2VcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IEFuYWx5dGljcyBmcm9tICdhbmFseXRpY3MnXG4gKiBpbXBvcnQgcGx1Z2luQUJDIGZyb20gJ2FuYWx5dGljcy1wbHVnaW4tYWJjJ1xuICogaW1wb3J0IHBsdWdpblhZWiBmcm9tICdhbmFseXRpY3MtcGx1Z2luLXh5eidcbiAqXG4gKiAvLyBpbml0aWFsaXplIGFuYWx5dGljc1xuICogY29uc3QgYW5hbHl0aWNzID0gQW5hbHl0aWNzKHtcbiAqICAgYXBwOiAnbXktYXdlc29tZS1hcHAnLFxuICogICBwbHVnaW5zOiBbXG4gKiAgICAgcGx1Z2luQUJDLFxuICogICAgIHBsdWdpblhZWlxuICogICBdXG4gKiB9KVxuICpcbiAqL1xuXG5mdW5jdGlvbiBhbmFseXRpY3MoKSB7XG4gIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgY3VzdG9tUmVkdWNlcnMgPSBjb25maWcucmVkdWNlcnMgfHwge307XG4gIHZhciBpbml0aWFsVXNlciA9IGNvbmZpZy5pbml0aWFsVXNlciB8fCB7fTsgLy8gQFRPRE8gYWRkIGN1c3RvbSB2YWx1ZSByZW9sdmVycyBmb3IgdXNlcklkIGFuZCBhbm9uSWRcbiAgLy8gY29uc3QgcmVzb2x2ZXJzID0gY29uZmlnLnJlc29sdmVycyB8fCB7fVxuXG4gIC8qIFBhcnNlIHBsdWdpbnMgYXJyYXkgKi9cblxuICB2YXIgcGFyc2VkT3B0aW9ucyA9IChjb25maWcucGx1Z2lucyB8fCBbXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsdWdpbikge1xuICAgIGlmIChpc0Z1bmN0aW9uKHBsdWdpbikpIHtcbiAgICAgIC8qIEN1c3RvbSByZWR1eCBtaWRkbGV3YXJlICovXG4gICAgICBhY2MubWlkZGxld2FyZXMgPSBhY2MubWlkZGxld2FyZXMuY29uY2F0KHBsdWdpbik7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0gLy8gTGVnYWN5IHBsdWdpbiB3aXRoIG5hbWVcblxuXG4gICAgaWYgKHBsdWdpbi5OQU1FU1BBQ0UpIHBsdWdpbi5uYW1lID0gcGx1Z2luLk5BTUVTUEFDRTtcblxuICAgIGlmICghcGx1Z2luLm5hbWUpIHtcbiAgICAgIC8qIFBsdWdpbnMgbXVzdCBzdXBwbHkgYSBcIm5hbWVcIiBwcm9wZXJ0eS4gU2VlIGVycm9yIHVybCBmb3IgbW9yZSBkZXRhaWxzICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfVVJMICsgJzEnKTtcbiAgICB9IC8vIGlmIHBsdWdpbiBleHBvc2VzIEVWRU5UUyBjYXB0dXJlIGF2YWlsYWJsZSBldmVudHNcblxuXG4gICAgdmFyIGRlZmluZWRFdmVudHMgPSBwbHVnaW4uRVZFTlRTID8gT2JqZWN0LmtleXMocGx1Z2luLkVWRU5UUykubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgICByZXR1cm4gcGx1Z2luLkVWRU5UU1trXTtcbiAgICB9KSA6IFtdO1xuICAgIHZhciBlbmFibGVkRnJvbU1lcmdlID0gIShwbHVnaW4uZW5hYmxlZCA9PT0gZmFsc2UpO1xuICAgIHZhciBlbmFibGVkRnJvbVBsdWdpbkNvbmZpZyA9ICEocGx1Z2luLmNvbmZpZyAmJiBwbHVnaW4uY29uZmlnLmVuYWJsZWQgPT09IGZhbHNlKTsgLy8gdG9wIGxldmVsIHsgZW5hYmxlZDogZmFsc2UgfSB0YWtlcyBwcmVzaWRlbmNlIG92ZXIgeyBjb25maWc6IGVuYWJsZWQ6IGZhbHNlIH1cblxuICAgIGFjYy5wbHVnaW5FbmFibGVkW3BsdWdpbi5uYW1lXSA9IGVuYWJsZWRGcm9tTWVyZ2UgJiYgZW5hYmxlZEZyb21QbHVnaW5Db25maWc7XG4gICAgZGVsZXRlIHBsdWdpbi5lbmFibGVkO1xuXG4gICAgaWYgKHBsdWdpbi5tZXRob2RzKSB7XG4gICAgICBhY2MubWV0aG9kc1twbHVnaW4ubmFtZV0gPSBPYmplY3Qua2V5cyhwbHVnaW4ubWV0aG9kcykucmVkdWNlKGZ1bmN0aW9uIChhLCBjKSB7XG4gICAgICAgIC8vIGVucmljaCBtZXRob2RzIHdpdGggYW5hbHl0aWNzIGluc3RhbmNlXG4gICAgICAgIGFbY10gPSBhcHBlbmRBcmd1bWVudHMocGx1Z2luLm1ldGhvZHNbY10pO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0sIHt9KTsgLy8gUmVtb3ZlIGFkZGl0aW9uYWwgbWV0aG9kcyBmcm9tIHBsdWdpbnNcblxuICAgICAgZGVsZXRlIHBsdWdpbi5tZXRob2RzO1xuICAgIH0gLy8gQ29udmVydCBhdmFpbGFibGUgbWV0aG9kcyBpbnRvIGV2ZW50c1xuXG5cbiAgICB2YXIgbWV0aG9kc1RvRXZlbnRzID0gT2JqZWN0LmtleXMocGx1Z2luKTsgLy8gQ29tYmluZSBldmVudHNcblxuICAgIHZhciBhbGxFdmVudHMgPSBtZXRob2RzVG9FdmVudHMuY29uY2F0KGRlZmluZWRFdmVudHMpOyAvLyBEZWR1cGUgZXZlbnRzIGxpc3RcblxuICAgIHZhciBhbGxFdmVudHNVbmlxdWUgPSBuZXcgU2V0KGFjYy5ldmVudHMuY29uY2F0KGFsbEV2ZW50cykpO1xuICAgIGFjYy5ldmVudHMgPSBBcnJheS5mcm9tKGFsbEV2ZW50c1VuaXF1ZSk7XG4gICAgYWNjLnBsdWdpbnNBcnJheSA9IGFjYy5wbHVnaW5zQXJyYXkuY29uY2F0KHBsdWdpbik7XG5cbiAgICBpZiAoYWNjLnBsdWdpbnNbcGx1Z2luLm5hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocGx1Z2luLm5hbWUgKyAnQWxyZWFkeUxvYWRlZCcpO1xuICAgIH1cblxuICAgIGFjYy5wbHVnaW5zW3BsdWdpbi5uYW1lXSA9IHBsdWdpbjtcblxuICAgIGlmICghYWNjLnBsdWdpbnNbcGx1Z2luLm5hbWVdLmxvYWRlZCkge1xuICAgICAgLy8gc2V0IGRlZmF1bHQgbG9hZGVkIGZ1bmNcbiAgICAgIGFjYy5wbHVnaW5zW3BsdWdpbi5uYW1lXS5sb2FkZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7XG4gICAgcGx1Z2luczoge30sXG4gICAgcGx1Z2luRW5hYmxlZDoge30sXG4gICAgbWV0aG9kczoge30sXG4gICAgcGx1Z2luc0FycmF5OiBbXSxcbiAgICBtaWRkbGV3YXJlczogW10sXG4gICAgZXZlbnRzOiBbXVxuICB9KTtcbiAgLyogU3RvcmFnZSBieSBkZWZhdWx0IGlzIHNldCB0byBnbG9iYWwgJiBpcyBub3QgcGVyc2lzdGVkICovXG5cbiAgdmFyIHN0b3JhZ2UgPSBjb25maWcuc3RvcmFnZSA/IGNvbmZpZy5zdG9yYWdlIDoge1xuICAgIGdldEl0ZW06IGdldCxcbiAgICBzZXRJdGVtOiBzZXQsXG4gICAgcmVtb3ZlSXRlbTogcmVtb3ZlXG4gIH07XG4gIHZhciBnZXRVc2VyUHJvcCA9IGdldFVzZXJQcm9wRnVuYyhzdG9yYWdlKTsgLy8gbXV0YWJsZSBpbnRyZWdyYXRpb25zIG9iamVjdCBmb3IgZHluYW1pYyBsb2FkaW5nXG5cbiAgdmFyIGN1c3RvbVBsdWdpbnMgPSBwYXJzZWRPcHRpb25zLnBsdWdpbnM7XG4gIC8qIEdyYWIgYWxsIHJlZ2lzdGVyZWQgZXZlbnRzIGZyb20gcGx1Z2lucyBsb2FkZWQgKi9cblxuICB2YXIgYWxsUGx1Z2luRXZlbnRzID0gcGFyc2VkT3B0aW9ucy5ldmVudHMuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuICFub25FdmVudHMuaW5jbHVkZXMobmFtZSk7XG4gIH0pLnNvcnQoKTtcbiAgdmFyIHVuaXF1ZUV2ZW50cyA9IG5ldyBTZXQoYWxsUGx1Z2luRXZlbnRzLmNvbmNhdChjb3JlRXZlbnRzKS5maWx0ZXIoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gIW5vbkV2ZW50cy5pbmNsdWRlcyhuYW1lKTtcbiAgfSkpO1xuICB2YXIgYWxsU3lzdGVtRXZlbnRzID0gQXJyYXkuZnJvbSh1bmlxdWVFdmVudHMpLnNvcnQoKTtcbiAgLyogcGx1Z2luIG1ldGhvZHMoZnVuY3Rpb25zKSBtdXN0IGJlIGtlcHQgb3V0IG9mIHN0YXRlLiB0aHVzIHRoZXkgbGl2ZSBoZXJlICovXG5cbiAgdmFyIGdldFBsdWdpbnMgPSBmdW5jdGlvbiBnZXRQbHVnaW5zKCkge1xuICAgIHJldHVybiBjdXN0b21QbHVnaW5zO1xuICB9O1xuXG4gIHZhciBfRHluYW1pY01pZGRsZXdhcmUgPSBuZXcgRHluYW1pY01pZGRsZXdhcmUoKSxcbiAgICAgIGFkZE1pZGRsZXdhcmUgPSBfRHluYW1pY01pZGRsZXdhcmUuYWRkTWlkZGxld2FyZSxcbiAgICAgIHJlbW92ZU1pZGRsZXdhcmUgPSBfRHluYW1pY01pZGRsZXdhcmUucmVtb3ZlTWlkZGxld2FyZSxcbiAgICAgIGR5bmFtaWNNaWRkbGV3YXJlcyA9IF9EeW5hbWljTWlkZGxld2FyZS5keW5hbWljTWlkZGxld2FyZXM7XG5cbiAgdmFyIG5vbkFib3J0YWJsZSA9IGZ1bmN0aW9uIG5vbkFib3J0YWJsZSgpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYCR7RVJST1JfVVJMfTNgKVxuICAgIHRocm93IG5ldyBFcnJvcignQWJvcnQgZGlzYWJsZWQgaW5MaXN0ZW5lcicpO1xuICB9OyAvLyBQYXJzZSBVUkwgcGFyYW1ldGVyc1xuXG5cbiAgdmFyIHBhcmFtcyA9IHBhcmFtc1BhcnNlKCk7IC8vIEluaXRpYWxpemUgdmlzaXRvciBpbmZvcm1hdGlvblxuXG4gIHZhciBwZXJzaXN0ZWRVc2VyID0gZ2V0UGVyc2lzdGVkVXNlckRhdGEoc3RvcmFnZSk7XG5cbiAgdmFyIHZpc2l0b3JJbmZvID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHBlcnNpc3RlZFVzZXIpLCBpbml0aWFsVXNlciksICFwYXJhbXMuYW5fdWlkID8ge30gOiB7XG4gICAgdXNlcklkOiBwYXJhbXMuYW5fdWlkXG4gIH0pLCAhcGFyYW1zLmFuX2FpZCA/IHt9IDoge1xuICAgIGFub255bW91c0lkOiBwYXJhbXMuYW5fYWlkXG4gIH0pOyAvLyBJZiBubyBhbm9uIGlkIHNldCwgY3JlYXRlIG9uZVxuXG5cbiAgaWYgKCF2aXNpdG9ySW5mby5hbm9ueW1vdXNJZCkge1xuICAgIHZpc2l0b3JJbmZvLmFub255bW91c0lkID0gdXVpZCgpO1xuICB9XG4gIC8qKlxuICAgKiBBc3luYyBNYW5hZ2VtZW50IG1ldGhvZHMgZm9yIHBsdWdpbnMuIFxuICAgKiBcbiAgICogVGhpcyBpcyBhbHNvIHdoZXJlIFtjdXN0b20gbWV0aG9kc10oaHR0cHM6Ly9iaXQubHkvMzI5dkZYeSkgYXJlIGxvYWRlZCBpbnRvIHRoZSBpbnN0YW5jZS5cbiAgICogQHR5cGVkZWYge09iamVjdH0gUGx1Z2luc1xuICAgKiBAcHJvcGVydHkge0VuYWJsZVBsdWdpbn0gZW5hYmxlIC0gU2V0IHN0b3JhZ2UgdmFsdWVcbiAgICogQHByb3BlcnR5IHtEaXNhYmxlUGx1Z2lufSBkaXNhYmxlIC0gUmVtb3ZlIHN0b3JhZ2UgdmFsdWVcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogLy8gRW5hYmxlIGEgcGx1Z2luIGJ5IG5hbWVzcGFjZVxuICAgKiBhbmFseXRpY3MucGx1Z2lucy5lbmFibGUoJ2tlZW5pbycpXG4gICAqXG4gICAqIC8vIERpc2FibGUgYSBwbHVnaW4gYnkgbmFtZXNwYWNlXG4gICAqIGFuYWx5dGljcy5wbHVnaW5zLmRpc2FibGUoJ2dvb2dsZS1hbmFseXRpY3MnKVxuICAgKi9cblxuXG4gIHZhciBwbHVnaW5zID0gX29iamVjdFNwcmVhZDIoe1xuICAgIC8qKlxuICAgICAqIEVuYWJsZSBhbmFseXRpY3MgcGx1Z2luXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBFbmFibGVQbHVnaW5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8c3RyaW5nW119IHBsdWdpbnMgLSBuYW1lIG9mIHBsdWdpbnMocykgdG8gZGlzYWJsZVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gY2FsbGJhY2sgYWZ0ZXIgZW5hYmxlIHJ1bnNcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYW5hbHl0aWNzLnBsdWdpbnMuZW5hYmxlKCdnb29nbGUtYW5hbHl0aWNzJykudGhlbigoKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnZG8gc3R1ZmYnKVxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiAvLyBFbmFibGUgbXVsdGlwbGUgcGx1Z2lucyBhdCBvbmNlXG4gICAgICogYW5hbHl0aWNzLnBsdWdpbnMuZW5hYmxlKFsnZ29vZ2xlLWFuYWx5dGljcycsICdzZWdtZW50J10pLnRoZW4oKCkgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coJ2RvIHN0dWZmJylcbiAgICAgKiB9KVxuICAgICAqL1xuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKHBsdWdpbnMsIGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEVWRU5UUyQxLmVuYWJsZVBsdWdpbixcbiAgICAgICAgICBwbHVnaW5zOiBlbnN1cmVBcnJheShwbHVnaW5zKSxcbiAgICAgICAgICBfOiB7XG4gICAgICAgICAgICBvcmlnaW5hbEFjdGlvbjogRVZFTlRTJDEuZW5hYmxlUGx1Z2luXG4gICAgICAgICAgfVxuICAgICAgICB9LCByZXNvbHZlLCBbY2FsbGJhY2tdKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIGFuYWx5dGljcyBwbHVnaW5cbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IERpc2FibGVQbHVnaW5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8c3RyaW5nW119IHBsdWdpbnMgLSBuYW1lIG9mIGludGVncmF0aW9uKHMpIHRvIGRpc2FibGVcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBjYWxsYmFjayBhZnRlciBkaXNhYmxlIHJ1bnNcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYW5hbHl0aWNzLnBsdWdpbnMuZGlzYWJsZSgnZ29vZ2xlJykudGhlbigoKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnZG8gc3R1ZmYnKVxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiBhbmFseXRpY3MucGx1Z2lucy5kaXNhYmxlKFsnZ29vZ2xlJywgJ3NlZ21lbnQnXSkudGhlbigoKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnZG8gc3R1ZmYnKVxuICAgICAqIH0pXG4gICAgICovXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZShwbHVnaW5zLCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBFVkVOVFMkMS5kaXNhYmxlUGx1Z2luLFxuICAgICAgICAgIHBsdWdpbnM6IGVuc3VyZUFycmF5KHBsdWdpbnMpLFxuICAgICAgICAgIF86IHtcbiAgICAgICAgICAgIG9yaWdpbmFsQWN0aW9uOiBFVkVOVFMkMS5kaXNhYmxlUGx1Z2luXG4gICAgICAgICAgfVxuICAgICAgICB9LCByZXNvbHZlLCBbY2FsbGJhY2tdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgcGFyc2VkT3B0aW9ucy5tZXRob2RzKTtcbiAgLyoqXG4gICAqIEFuYWx5dGljIGluc3RhbmNlIHJldHVybmVkIGZyb20gaW5pdGlhbGl6YXRpb25cbiAgICogQHR5cGVkZWYge09iamVjdH0gQW5hbHl0aWNzSW5zdGFuY2VcbiAgICogQHByb3BlcnR5IHtJZGVudGlmeX0gaWRlbnRpZnkgLSBJZGVudGlmeSBhIHVzZXJcbiAgICogQHByb3BlcnR5IHtUcmFja30gdHJhY2sgLSBUcmFjayBhbiBhbmFseXRpY3MgZXZlbnRcbiAgICogQHByb3BlcnR5IHtQYWdlfSBwYWdlIC0gVHJpZ2dlciBwYWdlIHZpZXdcbiAgICogQHByb3BlcnR5IHtVc2VyfSB1c2VyIC0gR2V0IHVzZXIgZGF0YVxuICAgKiBAcHJvcGVydHkge1Jlc2V0fSByZXNldCAtIENsZWFyIGluZm9ybWF0aW9uIGFib3V0IHVzZXIgJiByZXNldCBhbmFseXRpY3NcbiAgICogQHByb3BlcnR5IHtSZWFkeX0gcmVhZHkgLSBGaXJlIGNhbGxiYWNrIG9uIGFuYWx5dGljcyByZWFkeSBldmVudFxuICAgKiBAcHJvcGVydHkge09ufSBvbiAtIEZpcmUgY2FsbGJhY2sgb24gYW5hbHl0aWNzIGxpZmVjeWNsZSBldmVudHMuXG4gICAqIEBwcm9wZXJ0eSB7T25jZX0gb25jZSAtIEZpcmUgY2FsbGJhY2sgb24gYW5hbHl0aWNzIGxpZmVjeWNsZSBldmVudHMgb25jZS5cbiAgICogQHByb3BlcnR5IHtHZXRTdGF0ZX0gZ2V0U3RhdGUgLSBHZXQgZGF0YSBhYm91dCB1c2VyLCBhY3Rpdml0eSwgb3IgY29udGV4dC5cbiAgICogQHByb3BlcnR5IHtTdG9yYWdlfSBzdG9yYWdlIC0gc3RvcmFnZSBtZXRob2RzXG4gICAqIEBwcm9wZXJ0eSB7UGx1Z2luc30gcGx1Z2lucyAtIHBsdWdpbiBtZXRob2RzXG4gICAqL1xuXG5cbiAgdmFyIGluc3RhbmNlID0ge1xuICAgIC8qKlxuICAgICogSWRlbnRpZnkgYSB1c2VyLiBUaGlzIHdpbGwgdHJpZ2dlciBgaWRlbnRpZnlgIGNhbGxzIGluIGFueSBpbnN0YWxsZWQgcGx1Z2lucyBhbmQgd2lsbCBzZXQgdXNlciBkYXRhIGluIGxvY2FsU3RvcmFnZVxuICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBJZGVudGlmeVxuICAgICogQHBhcmFtICB7U3RyaW5nfSAgIHVzZXJJZCAgLSBVbmlxdWUgSUQgb2YgdXNlclxuICAgICogQHBhcmFtICB7T2JqZWN0fSAgIFt0cmFpdHNdICAtIE9iamVjdCBvZiB1c2VyIHRyYWl0c1xuICAgICogQHBhcmFtICB7T2JqZWN0fSAgIFtvcHRpb25zXSAtIE9wdGlvbnMgdG8gcGFzcyB0byBpZGVudGlmeSBjYWxsXG4gICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIENhbGxiYWNrIGZ1bmN0aW9uIGFmdGVyIGlkZW50aWZ5IGNvbXBsZXRlc1xuICAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAgKiBAYXBpIHB1YmxpY1xuICAgICpcbiAgICAqIEBleGFtcGxlXG4gICAgKlxuICAgICogLy8gQmFzaWMgdXNlciBpZCBpZGVudGlmeVxuICAgICogYW5hbHl0aWNzLmlkZW50aWZ5KCd4eXotMTIzJylcbiAgICAqXG4gICAgKiAvLyBJZGVudGlmeSB3aXRoIGFkZGl0aW9uYWwgdHJhaXRzXG4gICAgKiBhbmFseXRpY3MuaWRlbnRpZnkoJ3h5ei0xMjMnLCB7XG4gICAgKiAgIG5hbWU6ICdzdGV2ZScsXG4gICAgKiAgIGNvbXBhbnk6ICdoZWxsby1jbGlja3knXG4gICAgKiB9KVxuICAgICpcbiAgICAqIC8vIEZpcmUgY2FsbGJhY2sgd2l0aCAybmQgb3IgM3JkIGFyZ3VtZW50XG4gICAgKiBhbmFseXRpY3MuaWRlbnRpZnkoJ3h5ei0xMjMnLCAoKSA9PiB7XG4gICAgKiAgIGNvbnNvbGUubG9nKCdkbyB0aGlzIGFmdGVyIGlkZW50aWZ5JylcbiAgICAqIH0pXG4gICAgKlxuICAgICogLy8gRGlzYWJsZSBzZW5kaW5nIHVzZXIgZGF0YSB0byBzcGVjaWZpYyBhbmFseXRpYyB0b29sc1xuICAgICogYW5hbHl0aWNzLmlkZW50aWZ5KCd4eXotMTIzJywge30sIHtcbiAgICAqICAgcGx1Z2luczoge1xuICAgICogICAgIC8vIGRpc2FibGUgc2VuZGluZyB0aGlzIGlkZW50aWZ5IGNhbGwgdG8gc2VnbWVudFxuICAgICogICAgIHNlZ21lbnQ6IGZhbHNlXG4gICAgKiAgIH1cbiAgICAqIH0pXG4gICAgKlxuICAgICogLy8gU2VuZCB1c2VyIGRhdGEgdG8gb25seSB0byBzcGVjaWZpYyBhbmFseXRpYyB0b29sc1xuICAgICogYW5hbHl0aWNzLmlkZW50aWZ5KCd4eXotMTIzJywge30sIHtcbiAgICAqICAgcGx1Z2luczoge1xuICAgICogICAgIC8vIGRpc2FibGUgdGhpcyBzcGVjaWZpYyBpZGVudGlmeSBpbiBhbGwgcGx1Z2lucyBleGNlcHQgY3VzdG9tZXJpb1xuICAgICogICAgIGFsbDogZmFsc2UsXG4gICAgKiAgICAgY3VzdG9tZXJpbzogdHJ1ZVxuICAgICogICB9XG4gICAgKiB9KVxuICAgICovXG4gICAgaWRlbnRpZnk6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfaWRlbnRpZnkgPSBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL3JlZ2VuZXJhdG9yLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSh1c2VySWQsIHRyYWl0cywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGlkLCBkYXRhLCBvcHRzLCB1c2VyLCByZXNvbHZlZElkO1xuICAgICAgICByZXR1cm4gcmVnZW5lcmF0b3Iud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBpZCA9IGlzU3RyaW5nKHVzZXJJZCkgPyB1c2VySWQgOiBudWxsO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBpc09iamVjdCh1c2VySWQpID8gdXNlcklkIDogdHJhaXRzO1xuICAgICAgICAgICAgICAgIG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgICAgIHVzZXIgPSBpbnN0YW5jZS51c2VyKCk7XG4gICAgICAgICAgICAgICAgLyogc2V0cyB0ZW1wb3JhcnkgaW4gbWVtb3J5IGlkLiBOb3QgdG8gYmUgcmVsaWVkIG9uICovXG5cbiAgICAgICAgICAgICAgICBzZXQodGVtcEtleShJRCksIGlkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlZElkID0gaWQgfHwgZGF0YS51c2VySWQgfHwgZ2V0VXNlclByb3AoSUQsIGluc3RhbmNlLCBkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaChfb2JqZWN0U3ByZWFkMih7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEVWRU5UUyQxLmlkZW50aWZ5U3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogcmVzb2x2ZWRJZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhaXRzOiBkYXRhIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRzLFxuICAgICAgICAgICAgICAgICAgICBhbm9ueW1vdXNJZDogdXNlci5hbm9ueW1vdXNJZFxuICAgICAgICAgICAgICAgICAgfSwgdXNlci5pZCAmJiB1c2VyLmlkICE9PSBpZCAmJiB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzSWQ6IHVzZXIuaWRcbiAgICAgICAgICAgICAgICAgIH0pLCByZXNvbHZlLCBbdHJhaXRzLCBvcHRpb25zLCBjYWxsYmFja10pO1xuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgX2NhbGxlZSk7XG4gICAgICB9KSk7XG5cbiAgICAgIGZ1bmN0aW9uIGlkZW50aWZ5KF94LCBfeDIsIF94MywgX3g0KSB7XG4gICAgICAgIHJldHVybiBfaWRlbnRpZnkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlkZW50aWZ5O1xuICAgIH0oKSxcblxuICAgIC8qKlxuICAgICAqIFRyYWNrIGFuIGFuYWx5dGljcyBldmVudC4gVGhpcyB3aWxsIHRyaWdnZXIgYHRyYWNrYCBjYWxscyBpbiBhbnkgaW5zdGFsbGVkIHBsdWdpbnNcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFRyYWNrXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSAgIGV2ZW50TmFtZSAtIEV2ZW50IG5hbWVcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgW3BheWxvYWRdICAgLSBFdmVudCBwYXlsb2FkXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSAgIFtvcHRpb25zXSAgIC0gRXZlbnQgb3B0aW9uc1xuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbY2FsbGJhY2tdICAtIENhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgdHJhY2tpbmcgY29tcGxldGVzXG4gICAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAgICogQGFwaSBwdWJsaWNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBCYXNpYyBldmVudCB0cmFja2luZ1xuICAgICAqIGFuYWx5dGljcy50cmFjaygnYnV0dG9uQ2xpY2tlZCcpXG4gICAgICpcbiAgICAgKiAvLyBFdmVudCB0cmFja2luZyB3aXRoIHBheWxvYWRcbiAgICAgKiBhbmFseXRpY3MudHJhY2soJ2l0ZW1QdXJjaGFzZWQnLCB7XG4gICAgICogICBwcmljZTogMTEsXG4gICAgICogICBza3U6ICcxMjM0J1xuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiAvLyBGaXJlIGNhbGxiYWNrIHdpdGggMm5kIG9yIDNyZCBhcmd1bWVudFxuICAgICAqIGFuYWx5dGljcy50cmFjaygnbmV3c2xldHRlclN1YnNjcmliZWQnLCAoKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnZG8gdGhpcyBhZnRlciB0cmFjaycpXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIC8vIERpc2FibGUgc2VuZGluZyB0aGlzIGV2ZW50IHRvIHNwZWNpZmljIGFuYWx5dGljIHRvb2xzXG4gICAgICogYW5hbHl0aWNzLnRyYWNrKCdjYXJ0QWJhbmRvbmVkJywge1xuICAgICAqICAgaXRlbXM6IFsneHl6JywgJ2FiYyddXG4gICAgICogfSwge1xuICAgICAqICAgcGx1Z2luczoge1xuICAgICAqICAgICAvLyBkaXNhYmxlIHRyYWNrIGV2ZW50IGZvciBzZWdtZW50XG4gICAgICogICAgIHNlZ21lbnQ6IGZhbHNlXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIC8vIFNlbmQgZXZlbnQgdG8gb25seSB0byBzcGVjaWZpYyBhbmFseXRpYyB0b29sc1xuICAgICAqIGFuYWx5dGljcy50cmFjaygnY3VzdG9tZXJJb09ubHlFdmVudEV4YW1wbGUnLCB7XG4gICAgICogICBwcmljZTogMTEsXG4gICAgICogICBza3U6ICcxMjM0J1xuICAgICAqIH0sIHtcbiAgICAgKiAgIHBsdWdpbnM6IHtcbiAgICAgKiAgICAgLy8gZGlzYWJsZSB0aGlzIHNwZWNpZmljIHRyYWNrIGNhbGwgYWxsIHBsdWdpbnMgZXhjZXB0IGN1c3RvbWVyaW9cbiAgICAgKiAgICAgYWxsOiBmYWxzZSxcbiAgICAgKiAgICAgY3VzdG9tZXJpbzogdHJ1ZVxuICAgICAqICAgfVxuICAgICAqIH0pXG4gICAgICovXG4gICAgdHJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdHJhY2sgPSBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL3JlZ2VuZXJhdG9yLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoZXZlbnROYW1lLCBwYXlsb2FkLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbmFtZSwgZGF0YSwgb3B0cztcbiAgICAgICAgcmV0dXJuIHJlZ2VuZXJhdG9yLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIG5hbWUgPSBpc09iamVjdChldmVudE5hbWUpID8gZXZlbnROYW1lLmV2ZW50IDogZXZlbnROYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEoIW5hbWUgfHwgIWlzU3RyaW5nKG5hbWUpKSkge1xuICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdmVudE1pc3NpbmcnKTtcblxuICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgZGF0YSA9IGlzT2JqZWN0KGV2ZW50TmFtZSkgPyBldmVudE5hbWUgOiBwYXlsb2FkIHx8IHt9O1xuICAgICAgICAgICAgICAgIG9wdHMgPSBpc09iamVjdChvcHRpb25zKSA/IG9wdGlvbnMgOiB7fTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBFVkVOVFMkMS50cmFja1N0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBldmVudDogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogb3B0cyxcbiAgICAgICAgICAgICAgICAgICAgdXNlcklkOiBnZXRVc2VyUHJvcChJRCwgaW5zdGFuY2UsIHBheWxvYWQpLFxuICAgICAgICAgICAgICAgICAgICBhbm9ueW1vdXNJZDogZ2V0VXNlclByb3AoQU5PTklELCBpbnN0YW5jZSwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgIH0sIHJlc29sdmUsIFtwYXlsb2FkLCBvcHRpb25zLCBjYWxsYmFja10pO1xuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sIF9jYWxsZWUyKTtcbiAgICAgIH0pKTtcblxuICAgICAgZnVuY3Rpb24gdHJhY2soX3g1LCBfeDYsIF94NywgX3g4KSB7XG4gICAgICAgIHJldHVybiBfdHJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRyYWNrO1xuICAgIH0oKSxcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgcGFnZSB2aWV3LiBUaGlzIHdpbGwgdHJpZ2dlciBgcGFnZWAgY2FsbHMgaW4gYW55IGluc3RhbGxlZCBwbHVnaW5zXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBQYWdlXG4gICAgICogQHBhcmFtICB7UGFnZURhdGF9IFtkYXRhXSAtIFBhZ2UgZGF0YSBvdmVycmlkZXMuXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSAgIFtvcHRpb25zXSAtIFBhZ2UgdHJhY2tpbmcgb3B0aW9uc1xuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgdG8gZmlyZSBhZnRlciBwYWdlIHZpZXcgY2FsbCBjb21wbGV0ZXNcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEJhc2ljIHBhZ2UgdHJhY2tpbmdcbiAgICAgKiBhbmFseXRpY3MucGFnZSgpXG4gICAgICpcbiAgICAgKiAvLyBQYWdlIHRyYWNraW5nIHdpdGggcGFnZSBkYXRhIG92ZXJyaWRlc1xuICAgICAqIGFuYWx5dGljcy5wYWdlKHtcbiAgICAgKiAgIHVybDogJ2h0dHBzOi8vZ29vZ2xlLmNvbSdcbiAgICAgKiB9KVxuICAgICAqXG4gICAgICogLy8gRmlyZSBjYWxsYmFjayB3aXRoIDFzdCwgMm5kIG9yIDNyZCBhcmd1bWVudFxuICAgICAqIGFuYWx5dGljcy5wYWdlKCgpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdkbyB0aGlzIGFmdGVyIHBhZ2UnKVxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiAvLyBEaXNhYmxlIHNlbmRpbmcgdGhpcyBwYWdldmlldyB0byBzcGVjaWZpYyBhbmFseXRpYyB0b29sc1xuICAgICAqIGFuYWx5dGljcy5wYWdlKHt9LCB7XG4gICAgICogICBwbHVnaW5zOiB7XG4gICAgICogICAgIC8vIGRpc2FibGUgcGFnZSB0cmFja2luZyBldmVudCBmb3Igc2VnbWVudFxuICAgICAqICAgICBzZWdtZW50OiBmYWxzZVxuICAgICAqICAgfVxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiAvLyBTZW5kIHBhZ2V2aWV3IHRvIG9ubHkgdG8gc3BlY2lmaWMgYW5hbHl0aWMgdG9vbHNcbiAgICAgKiBhbmFseXRpY3MucGFnZSh7fSwge1xuICAgICAqICAgcGx1Z2luczoge1xuICAgICAqICAgICAvLyBkaXNhYmxlIHRoaXMgc3BlY2lmaWMgcGFnZSBpbiBhbGwgcGx1Z2lucyBleGNlcHQgY3VzdG9tZXJpb1xuICAgICAqICAgICBhbGw6IGZhbHNlLFxuICAgICAqICAgICBjdXN0b21lcmlvOiB0cnVlXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKi9cbiAgICBwYWdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3BhZ2UgPSBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL3JlZ2VuZXJhdG9yLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoZGF0YSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGQsIG9wdHM7XG4gICAgICAgIHJldHVybiByZWdlbmVyYXRvci53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHtcbiAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBkID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDoge307XG4gICAgICAgICAgICAgICAgb3B0cyA9IGlzT2JqZWN0KG9wdGlvbnMpID8gb3B0aW9ucyA6IHt9O1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgLy8gQFRPRE8gYWRkIGN1c3RvbSB2YWx1ZSByZW9sdmVycyBmb3IgdXNlcklkIGFuZCBhbm9uSWRcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZXJzLmdldFVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYXN5bmNVc2VySWQgPSBhd2FpdCByZXNvbHZlcnMuZ2V0VXNlcklkKClcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd4JywgeClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KFwicmV0dXJuXCIsIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEVWRU5UUyQxLnBhZ2VTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogZ2V0UGFnZURhdGEoZCksXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdHMsXG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogZ2V0VXNlclByb3AoSUQsIGluc3RhbmNlLCBkKSxcbiAgICAgICAgICAgICAgICAgICAgYW5vbnltb3VzSWQ6IGdldFVzZXJQcm9wKEFOT05JRCwgaW5zdGFuY2UsIGQpXG4gICAgICAgICAgICAgICAgICB9LCByZXNvbHZlLCBbZGF0YSwgb3B0aW9ucywgY2FsbGJhY2tdKTtcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCBfY2FsbGVlMyk7XG4gICAgICB9KSk7XG5cbiAgICAgIGZ1bmN0aW9uIHBhZ2UoX3g5LCBfeDEwLCBfeDExKSB7XG4gICAgICAgIHJldHVybiBfcGFnZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFnZTtcbiAgICB9KCksXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdXNlciBkYXRhXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBVc2VyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gZG90LnByb3AucGF0aCBvZiB1c2VyIGRhdGEuIEV4YW1wbGU6ICd0cmFpdHMuY29tcGFueS5uYW1lJ1xuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8b2JqZWN0fSB2YWx1ZSBvZiB1c2VyIGRhdGEgb3IgbnVsbFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEdldCBhbGwgdXNlciBkYXRhXG4gICAgICogY29uc3QgdXNlckRhdGEgPSBhbmFseXRpY3MudXNlcigpXG4gICAgICpcbiAgICAgKiAvLyBHZXQgdXNlciBpZFxuICAgICAqIGNvbnN0IHVzZXJJZCA9IGFuYWx5dGljcy51c2VyKCd1c2VySWQnKVxuICAgICAqXG4gICAgICogLy8gR2V0IHVzZXIgY29tcGFueSBuYW1lXG4gICAgICogY29uc3QgY29tcGFueU5hbWUgPSBhbmFseXRpY3MudXNlcigndHJhaXRzLmNvbXBhbnkubmFtZScpXG4gICAgICovXG4gICAgdXNlcjogZnVuY3Rpb24gdXNlcihrZXkpIHtcbiAgICAgIGlmIChrZXkgPT09IElEIHx8IGtleSA9PT0gJ2lkJykge1xuICAgICAgICByZXR1cm4gZ2V0VXNlclByb3AoSUQsIGluc3RhbmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gQU5PTklEIHx8IGtleSA9PT0gJ2Fub25JZCcpIHtcbiAgICAgICAgcmV0dXJuIGdldFVzZXJQcm9wKEFOT05JRCwgaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdXNlciA9IGluc3RhbmNlLmdldFN0YXRlKCd1c2VyJyk7XG4gICAgICBpZiAoIWtleSkgcmV0dXJuIHVzZXI7XG4gICAgICByZXR1cm4gZG90UHJvcCh1c2VyLCBrZXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZpc2l0b3IgJiByZXNldCBhbmFseXRpYyBzdGF0ZS5cbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFJlc2V0XG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEhhbmRsZXIgdG8gcnVuIGFmdGVyIHJlc2V0XG4gICAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFJlc2V0IGN1cnJlbnQgdmlzaXRvclxuICAgICAqIGFuYWx5dGljcy5yZXNldCgpXG4gICAgICovXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEVWRU5UUyQxLnJlc2V0U3RhcnRcbiAgICAgICAgfSwgcmVzb2x2ZSwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpcmUgY2FsbGJhY2sgb24gYW5hbHl0aWNzIHJlYWR5IGV2ZW50XG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBSZWFkeVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIHRyaWdnZXIgd2hlbiBhbGwgcHJvdmlkZXJzIGhhdmUgbG9hZGVkXG4gICAgICogQHJldHVybnMge0RldGFjaExpc3RlbmVyc30gLSBGdW5jdGlvbiB0byBkZXRhY2ggbGlzdGVuZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhbmFseXRpY3MucmVhZHkoKHBheWxvYWQpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdhbGwgcGx1Z2lucyBoYXZlIGxvYWRlZCBvciB3ZXJlIHNraXBwZWQnLCBwYXlsb2FkKTtcbiAgICAgKiB9KVxuICAgICAqL1xuICAgIHJlYWR5OiBmdW5jdGlvbiByZWFkeShjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLm9uKEVWRU5UUyQxLnJlYWR5LCBjYWxsYmFjayk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBhbmFseXRpY3MgbGlmZWN5Y2xlIGV2ZW50cy5cbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IE9uXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSAgIG5hbWUgLSBOYW1lIG9mIGV2ZW50IHRvIGxpc3RlbiB0b1xuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcbiAgICAgKiBAcmV0dXJuIHtEZXRhY2hMaXN0ZW5lcnN9IC0gRnVuY3Rpb24gdG8gZGV0YWNoIGxpc3RlbmVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gRmlyZSBmdW5jdGlvbiB3aGVuICd0cmFjaycgY2FsbHMgaGFwcGVuXG4gICAgICogYW5hbHl0aWNzLm9uKCd0cmFjaycsICh7IHBheWxvYWQgfSkgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coJ3RyYWNrIGNhbGwganVzdCBoYXBwZW5lZC4gRG8gc3R1ZmYnKVxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiAvLyBSZW1vdmUgbGlzdGVuZXIgYmVmb3JlIGl0IGlzIGNhbGxlZFxuICAgICAqIGNvbnN0IHJlbW92ZUxpc3RlbmVyID0gYW5hbHl0aWNzLm9uKCd0cmFjaycsICh7IHBheWxvYWQgfSkgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coJ1RoaXMgd2lsbCBuZXZlciBnZXQgY2FsbGVkJylcbiAgICAgKiB9KVxuICAgICAqXG4gICAgICogLy8gY2xlYW51cCAub24gbGlzdGVuZXJcbiAgICAgKiByZW1vdmVMaXN0ZW5lcigpXG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uIG9uKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIW5hbWUgfHwgIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IEVWRU5UUyQxLmJvb3RzdHJhcCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy5vbiBkaXNhYmxlZCBmb3IgJyArIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRSZWdleCA9IC9TdGFydCR8U3RhcnQ6LztcblxuICAgICAgaWYgKG5hbWUgPT09ICcqJykge1xuICAgICAgICB2YXIgYmVmb3JlSGFuZGxlciA9IGZ1bmN0aW9uIGJlZm9yZUhhbmRsZXIoc3RvcmUpIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgIGlmIChhY3Rpb24udHlwZS5tYXRjaChzdGFydFJlZ2V4KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnM6IGN1c3RvbVBsdWdpbnNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGFmdGVySGFuZGxlciA9IGZ1bmN0aW9uIGFmdGVySGFuZGxlcihzdG9yZSkge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgaWYgKCFhY3Rpb24udHlwZS5tYXRjaChzdGFydFJlZ2V4KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnM6IGN1c3RvbVBsdWdpbnNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTWlkZGxld2FyZShiZWZvcmVIYW5kbGVyLCBiZWZvcmUpO1xuICAgICAgICBhZGRNaWRkbGV3YXJlKGFmdGVySGFuZGxlciwgYWZ0ZXIpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0YWNoIGxpc3RlbmVyc1xuICAgICAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IERldGFjaExpc3RlbmVyc1xuICAgICAgICAgKi9cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJlbW92ZU1pZGRsZXdhcmUoYmVmb3JlSGFuZGxlciwgYmVmb3JlKTtcbiAgICAgICAgICByZW1vdmVNaWRkbGV3YXJlKGFmdGVySGFuZGxlciwgYWZ0ZXIpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zaXRpb24gPSBuYW1lLm1hdGNoKHN0YXJ0UmVnZXgpID8gYmVmb3JlIDogYWZ0ZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKHN0b3JlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gRVZFUllUSElOR1xuICAgICAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYWN0aW9uLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBwbHVnaW5zOiBjdXN0b21QbHVnaW5zLFxuICAgICAgICAgICAgICAgIGFib3J0OiBub25BYm9ydGFibGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBGb3IgZnV0dXJlIG1hdGNoaW5nIG9mIGV2ZW50IHN1YnBhdGhzIGB0cmFjazoqYCBldGNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5tYXRjaCgvXFwqJC8pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gKG5hbWUgPT09ICcqJykgPyAnLicgOiBuYW1lXG4gICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgJHttYXRjaH1gLCAnZycpXG4gICAgICAgICAgICB9ICovXG5cblxuICAgICAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgYWRkTWlkZGxld2FyZShoYW5kbGVyLCBwb3NpdGlvbik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlTWlkZGxld2FyZShoYW5kbGVyLCBwb3NpdGlvbik7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGFuIGV2ZW50IGFuZCBvbmx5IHRyaWdnZXIgaXQgb25seSBvbmNlLlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gT25jZVxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gbmFtZSAtIE5hbWUgb2YgZXZlbnQgdG8gbGlzdGVuIHRvXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxuICAgICAqIEByZXR1cm4ge0RldGFjaExpc3RlbmVyc30gLSBGdW5jdGlvbiB0byBkZXRhY2ggbGlzdGVuZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBGaXJlIGZ1bmN0aW9uIG9ubHkgb25jZSAndHJhY2snXG4gICAgICogYW5hbHl0aWNzLm9uY2UoJ3RyYWNrJywgKHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnVGhpcyB3aWxsIG9ubHkgdHJpZ2dlcmVkIG9uY2Ugd2hlbiBhbmFseXRpY3MudHJhY2soKSBmaXJlcycpXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIC8vIFJlbW92ZSBsaXN0ZW5lciBiZWZvcmUgaXQgaXMgY2FsbGVkXG4gICAgICogY29uc3QgbGlzdGVuZXIgPSBhbmFseXRpY3Mub25jZSgndHJhY2snLCAoeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdUaGlzIHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZCBiL2MgbGlzdGVuZXIoKSBpcyBjYWxsZWQnKVxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiAvLyBjbGVhbnVwIC5vbmNlIGxpc3RlbmVyIGJlZm9yZSBpdCBmaXJlc1xuICAgICAqIGxpc3RlbmVyKClcbiAgICAgKi9cbiAgICBvbmNlOiBmdW5jdGlvbiBvbmNlKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIW5hbWUgfHwgIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IEVWRU5UUyQxLmJvb3RzdHJhcCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy5vbmNlIGRpc2FibGVkIGZvciAnICsgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZXRhY2hMaXN0ZW5lciA9IGluc3RhbmNlLm9uKG5hbWUsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBwYXlsb2FkID0gX3JlZi5wYXlsb2FkO1xuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgIHBsdWdpbnM6IGN1c3RvbVBsdWdpbnMsXG4gICAgICAgICAgYWJvcnQ6IG5vbkFib3J0YWJsZVxuICAgICAgICB9KTsgLy8gZGV0YWNoIGxpc3RlbmVyIGFmdGVyIGl0cyBjYWxsZWQgb25jZVxuXG4gICAgICAgIGRldGFjaExpc3RlbmVyKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXRhY2hMaXN0ZW5lcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IGRhdGEgYWJvdXQgdXNlciwgYWN0aXZpdHksIG9yIGNvbnRleHQuIEFjY2VzcyBzdWIta2V5cyBvZiBzdGF0ZSB3aXRoIGBkb3QucHJvcGAgc3ludGF4LlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gR2V0U3RhdGVcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtrZXldIC0gZG90LnByb3AucGF0aCB2YWx1ZSBvZiBzdGF0ZVxuICAgICAqIEByZXR1cm4ge2FueX1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW5hbHl0aWNzXG4gICAgICogYW5hbHl0aWNzLmdldFN0YXRlKClcbiAgICAgKlxuICAgICAqIC8vIEdldCBhIHN1YnBhdGggb2Ygc3RhdGVcbiAgICAgKiBhbmFseXRpY3MuZ2V0U3RhdGUoJ2NvbnRleHQub2ZmbGluZScpXG4gICAgICovXG4gICAgZ2V0U3RhdGU6IGZ1bmN0aW9uIGdldFN0YXRlKGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgIGlmIChrZXkpIHJldHVybiBkb3RQcm9wKHN0YXRlLCBrZXkpO1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgLypcbiAgICAgKiBFbWl0IGV2ZW50cyBmb3Igb3RoZXIgcGx1Z2lucyBvciBtaWRkbGV3YXJlIHRvIHJlYWN0IHRvLlxuICAgICAqIEBwYXJhbSAge09iamVjdH0gYWN0aW9uIC0gZXZlbnQgdG8gZGlzcGF0Y2hcbiAgICAgKi9cbiAgICBkaXNwYXRjaDogZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgICB2YXIgYWN0aW9uRGF0YSA9IGlzU3RyaW5nKGFjdGlvbikgPyB7XG4gICAgICAgIHR5cGU6IGFjdGlvblxuICAgICAgfSA6IGFjdGlvbjtcblxuICAgICAgaWYgKGlzUmVzZXJ2ZWRBY3Rpb24oYWN0aW9uRGF0YS50eXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc2VydmVkIGFjdGlvbiAnICsgYWN0aW9uRGF0YS50eXBlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9wcml2YXRlID0gYWN0aW9uLl8gfHwge307IC8vIERpc3BhdGNoIGFjdGlvblN0YXJ0XG4gICAgICAvLyBjb25zdCBhdXRvUHJlZml4VHlwZSA9IGAke2FjdGlvbkRhdGEudHlwZS5yZXBsYWNlKC9TdGFydCQvLCAnJyl9U3RhcnRgXG5cblxuICAgICAgdmFyIGRpc3BhdGNoRGF0YSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBhY3Rpb25EYXRhKSwge30sIHtcbiAgICAgICAgXzogX29iamVjdFNwcmVhZDIoe1xuICAgICAgICAgIG9yaWdpbmFsQWN0aW9uOiBhY3Rpb25EYXRhLnR5cGVcbiAgICAgICAgfSwgX3ByaXZhdGUpIC8vIHR5cGU6IGAke2F1dG9QcmVmaXhUeXBlfWBcblxuICAgICAgfSk7XG5cbiAgICAgIHN0b3JlLmRpc3BhdGNoKGRpc3BhdGNoRGF0YSk7XG4gICAgfSxcbiAgICAvLyBEbyBub3QgdXNlLiBXaWxsIGJlIHJlbW92ZWQuIEhlcmUgZm9yIEJhY2t3YXJkcyBjb21wYXRpYmxpdHkuXG4gICAgLy8gTW92ZWQgdG8gYW5hbHl0aWNzLnBsdWdpbnMuZW5hYmxlXG4gICAgZW5hYmxlUGx1Z2luOiBwbHVnaW5zLmVuYWJsZSxcbiAgICAvLy8gRG8gbm90IHVzZS4gV2lsbCBiZSByZW1vdmVkLiBIZXJlIGZvciBCYWNrd2FyZHMgY29tcGF0aWJsaXR5LlxuICAgIC8vLyBNb3ZlZCB0byBhbmFseXRpY3MucGx1Z2lucy5kaXNhYmxlXG4gICAgZGlzYWJsZVBsdWdpbjogcGx1Z2lucy5kaXNhYmxlLFxuICAgIC8vIERvIG5vdCB1c2UuIFdpbGwgYmUgcmVtb3ZlZC4gSGVyZSBmb3IgQmFja3dhcmRzIGNvbXBhdGlibGl0eS5cbiAgICAvLyBOZXcgcGx1Z2lucyBhcGlcbiAgICBwbHVnaW5zOiBwbHVnaW5zLFxuXG4gICAgLyoqXG4gICAgICogU3RvcmFnZSB1dGlsaXRpZXMgZm9yIHBlcnNpc3RpbmcgZGF0YS5cbiAgICAgKiBUaGVzZSBtZXRob2RzIHdpbGwgYWxsb3cgeW91IHRvIHNhdmUgZGF0YSBpbiBsb2NhbFN0b3JhZ2UsIGNvb2tpZXMsIG9yIHRvIHRoZSB3aW5kb3cuXG4gICAgICogQHR5cGVkZWYge09iamVjdH0gU3RvcmFnZVxuICAgICAqIEBwcm9wZXJ0eSB7R2V0SXRlbX0gZ2V0SXRlbSAtIEdldCB2YWx1ZSBmcm9tIHN0b3JhZ2VcbiAgICAgKiBAcHJvcGVydHkge1NldEl0ZW19IHNldEl0ZW0gLSBTZXQgc3RvcmFnZSB2YWx1ZVxuICAgICAqIEBwcm9wZXJ0eSB7UmVtb3ZlSXRlbX0gcmVtb3ZlSXRlbSAtIFJlbW92ZSBzdG9yYWdlIHZhbHVlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gUHVsbCBzdG9yYWdlIG9mZiBhbmFseXRpY3MgaW5zdGFuY2VcbiAgICAgKiBjb25zdCB7IHN0b3JhZ2UgfSA9IGFuYWx5dGljc1xuICAgICAqXG4gICAgICogLy8gR2V0IHZhbHVlXG4gICAgICogc3RvcmFnZS5nZXRJdGVtKCdzdG9yYWdlX2tleScpXG4gICAgICpcbiAgICAgKiAvLyBTZXQgdmFsdWVcbiAgICAgKiBzdG9yYWdlLnNldEl0ZW0oJ3N0b3JhZ2Vfa2V5JywgJ3ZhbHVlJylcbiAgICAgKlxuICAgICAqIC8vIFJlbW92ZSB2YWx1ZVxuICAgICAqIHN0b3JhZ2UucmVtb3ZlSXRlbSgnc3RvcmFnZV9rZXknKVxuICAgICAqL1xuICAgIHN0b3JhZ2U6IHtcbiAgICAgIC8qKlxuICAgICAgICogR2V0IHZhbHVlIGZyb20gc3RvcmFnZVxuICAgICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBHZXRJdGVtXG4gICAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IC0gc3RvcmFnZSBrZXlcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBzdG9yYWdlIG9wdGlvbnNcbiAgICAgICAqIEByZXR1cm4ge0FueX1cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIGFuYWx5dGljcy5zdG9yYWdlLmdldEl0ZW0oJ3N0b3JhZ2Vfa2V5JylcbiAgICAgICAqL1xuICAgICAgZ2V0SXRlbTogc3RvcmFnZS5nZXRJdGVtLFxuXG4gICAgICAvKipcbiAgICAgICAqIFNldCBzdG9yYWdlIHZhbHVlXG4gICAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFNldEl0ZW1cbiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgLSBzdG9yYWdlIGtleVxuICAgICAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gc3RvcmFnZSB2YWx1ZVxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIHN0b3JhZ2Ugb3B0aW9uc1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogYW5hbHl0aWNzLnN0b3JhZ2Uuc2V0SXRlbSgnc3RvcmFnZV9rZXknLCAndmFsdWUnKVxuICAgICAgICovXG4gICAgICBzZXRJdGVtOiBmdW5jdGlvbiBzZXRJdGVtKGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEVWRU5UUyQxLnNldEl0ZW1TdGFydCxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogUmVtb3ZlIHN0b3JhZ2UgdmFsdWVcbiAgICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gUmVtb3ZlSXRlbVxuICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGtleSAtIHN0b3JhZ2Uga2V5XG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gc3RvcmFnZSBvcHRpb25zXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBhbmFseXRpY3Muc3RvcmFnZS5yZW1vdmVJdGVtKCdzdG9yYWdlX2tleScpXG4gICAgICAgKi9cbiAgICAgIHJlbW92ZUl0ZW06IGZ1bmN0aW9uIHJlbW92ZUl0ZW0oa2V5LCBvcHRpb25zKSB7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBFVkVOVFMkMS5yZW1vdmVJdGVtU3RhcnQsXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLypcbiAgICAgKiBTZXQgdGhlIGFub255bW91cyBJRCBvZiB0aGUgdmlzaXRvclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhbm9ueW1vdXNJZCAtIGFub255bW91cyBJZCB0byBzZXRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gc3RvcmFnZSBvcHRpb25zXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gU2V0IGFub255bW91cyBJRFxuICAgICAqIGFuYWx5dGljcy5zZXRBbm9ueW1vdXNJZCgnMTIzNDU2NycpXG4gICAgICovXG4gICAgc2V0QW5vbnltb3VzSWQ6IGZ1bmN0aW9uIHNldEFub255bW91c0lkKGFub255bW91c0lkLCBvcHRpb25zKSB7XG4gICAgICAvKiBzZXRzIHRlbXBvcmFyeSBpbiBtZW1vcnkgaWQuIE5vdCB0byBiZSByZWxpZWQgb24gKi9cbiAgICAgIC8vIHNldCh0ZW1wS2V5KEFOT05JRCksIGFub255bW91c0lkKVxuICAgICAgaW5zdGFuY2Uuc3RvcmFnZS5zZXRJdGVtKEFOT05fSUQsIGFub255bW91c0lkLCBvcHRpb25zKTtcbiAgICB9LFxuXG4gICAgLypcbiAgICAgKiBFdmVudHMgZXhwb3NlZCBieSBjb3JlIGFuYWx5dGljcyBsaWJyYXJ5IGFuZCBhbGwgbG9hZGVkIHBsdWdpbnNcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgZXZlbnRzOiB7XG4gICAgICBhbGw6IGFsbFN5c3RlbUV2ZW50cyxcbiAgICAgIGNvcmU6IGNvcmVFdmVudHMsXG4gICAgICBwbHVnaW5zOiBhbGxQbHVnaW5FdmVudHMgLy8gYnlUeXBlOiAodHlwZSkgPT4ge30gQFRvZG8gZ3JhYiBsb2dpYyBmcm9tIGVuZ2luZSBhbmQgZ2l2ZSBpbnNwZWN0YWJsZSBldmVudHNcblxuICAgIH1cbiAgfTtcblxuICB2YXIgZW5yaWNoTWlkZGxld2FyZSA9IGZ1bmN0aW9uIGVucmljaE1pZGRsZXdhcmUoc3RvcmVBUEkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGlmICghYWN0aW9uLm1ldGEpIHtcbiAgICAgICAgICBhY3Rpb24ubWV0YSA9IGdlbmVyYXRlTWV0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbWlkZGxld2FyZXMgPSBwYXJzZWRPcHRpb25zLm1pZGRsZXdhcmVzLmNvbmNhdChbZW5yaWNoTWlkZGxld2FyZSxcbiAgLyogQ29yZSBhbmFseXRpY3MgbWlkZGxld2FyZSAqL1xuICBkeW5hbWljTWlkZGxld2FyZXMoYmVmb3JlKSwgLy8gQmVmb3JlIGR5bmFtaWMgbWlkZGxld2FyZSA8LS0gZml4ZWQgcGFnZVN0YXJ0IC5vbiBsaXN0ZW5lclxuXG4gIC8qIFBsdWdpbiBlbmdpbmUgKi9cbiAgcGx1Z2luTWlkZGxld2FyZShpbnN0YW5jZSwgZ2V0UGx1Z2lucywge1xuICAgIGFsbDogYWxsU3lzdGVtRXZlbnRzLFxuICAgIHBsdWdpbnM6IGFsbFBsdWdpbkV2ZW50c1xuICB9KSwgc3RvcmFnZU1pZGRsZXdhcmUoc3RvcmFnZSksIGluaXRpYWxpemVNaWRkbGV3YXJlKGluc3RhbmNlKSwgaWRlbnRpZnlNaWRkbGV3YXJlKGluc3RhbmNlKSxcbiAgLyogYWZ0ZXIgZHluYW1pYyBtaWRkbGV3YXJlICovXG4gIGR5bmFtaWNNaWRkbGV3YXJlcyhhZnRlcildKTtcbiAgLyogSW5pdGlhbCBhbmFseXRpY3Mgc3RhdGUga2V5cyAqL1xuXG4gIHZhciBjb3JlUmVkdWNlcnMgPSB7XG4gICAgY29udGV4dDogY29udGV4dCxcbiAgICB1c2VyOiB1c2VyUmVkdWNlcihzdG9yYWdlKSxcbiAgICBwYWdlOiBwYWdlLFxuICAgIHRyYWNrOiB0cmFja1JlZHVjZXIsXG4gICAgcGx1Z2luczogY3JlYXRlUmVkdWNlcihnZXRQbHVnaW5zKSxcbiAgICBxdWV1ZTogcXVldWVSZWR1Y2VyXG4gIH07XG4gIHZhciBjb21wb3NlRW5oYW5jZXJzID0gY29tcG9zZTtcbiAgdmFyIGNvbXBvc2VXaXRoR2xvYmFsRGVidWcgPSBjb21wb3NlO1xuXG4gIGlmIChpc0Jyb3dzZXIgJiYgY29uZmlnLmRlYnVnKSB7XG4gICAgdmFyIGRldlRvb2xzID0gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXztcblxuICAgIGlmIChkZXZUb29scykge1xuICAgICAgY29tcG9zZUVuaGFuY2VycyA9IGRldlRvb2xzKHtcbiAgICAgICAgdHJhY2U6IHRydWUsXG4gICAgICAgIHRyYWNlTGltaXQ6IDI1XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb21wb3NlV2l0aEdsb2JhbERlYnVnID0gZnVuY3Rpb24gY29tcG9zZVdpdGhHbG9iYWxEZWJ1ZygpIHtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gRGVidWcoKTtcbiAgICAgIGlmIChpc09iamVjdChfdHlwZW9mKGFyZ3VtZW50c1swXSkpKSByZXR1cm4gY29tcG9zZVdpdGhEZWJ1ZygpO1xuICAgICAgcmV0dXJuIGNvbXBvc2VXaXRoRGVidWcoKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaW5pdGlhbENvbmZpZyA9IG1ha2VDb250ZXh0KGNvbmZpZyk7XG4gIHZhciBpbnRpYWxQbHVnaW5TdGF0ZSA9IHBhcnNlZE9wdGlvbnMucGx1Z2luc0FycmF5LnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbHVnaW4pIHtcbiAgICB2YXIgbmFtZSA9IHBsdWdpbi5uYW1lLFxuICAgICAgICBjb25maWcgPSBwbHVnaW4uY29uZmlnLFxuICAgICAgICBsb2FkZWQgPSBwbHVnaW4ubG9hZGVkO1xuICAgIHZhciBpc0VuYWJsZWQgPSBwYXJzZWRPcHRpb25zLnBsdWdpbkVuYWJsZWRbbmFtZV07XG4gICAgYWNjW25hbWVdID0ge1xuICAgICAgZW5hYmxlZDogaXNFbmFibGVkLFxuICAgICAgLy8gSWYgcGx1Z2luIGVuYWJsZWQgJiBoYXMgbm8gaW5pdGlhbGl6ZSBtZXRob2QsIHNldCBpbml0aWFsaXplZCB0byB0cnVlLCBlbHNlIGZhbHNlXG4gICAgICBpbml0aWFsaXplZDogaXNFbmFibGVkID8gQm9vbGVhbighcGx1Z2luLmluaXRpYWxpemUpIDogZmFsc2UsXG4gICAgICBsb2FkZWQ6IEJvb2xlYW4obG9hZGVkKCkpLFxuICAgICAgY29uZmlnOiBjb25maWcgfHwge31cbiAgICB9O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIGluaXRpYWxTdGF0ZSA9IHtcbiAgICBjb250ZXh0OiBpbml0aWFsQ29uZmlnLFxuICAgIHVzZXI6IHZpc2l0b3JJbmZvLFxuICAgIHBsdWdpbnM6IGludGlhbFBsdWdpblN0YXRlIC8vIFRvZG8gYWxsb3cgZm9yIG1vcmUgdXNlcmxhbmQgZGVmaW5lZCBpbml0aWFsIHN0YXRlP1xuXG4gIH07XG4gIC8qIENyZWF0ZSBhbmFseXRpY3Mgc3RvcmUhICovXG5cbiAgdmFyIHN0b3JlID0gY3JlYXRlU3RvcmUoIC8vIHJlZ2lzdGVyIHJlZHVjZXJzXG4gIGNvbWJpbmVSZWR1Y2Vycyhfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgY29yZVJlZHVjZXJzKSwgY3VzdG9tUmVkdWNlcnMpKSwgLy8gc2V0IHVzZXIgZGVmaW5lZCBpbml0aWFsIHN0YXRlXG4gIGluaXRpYWxTdGF0ZSwgLy8gcmVnaXN0ZXIgbWlkZGxld2FyZSAmIHBsdWdpbnMgdXNlZFxuICBjb21wb3NlV2l0aEdsb2JhbERlYnVnKGNvbXBvc2VFbmhhbmNlcnMoYXBwbHlNaWRkbGV3YXJlLmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KG1pZGRsZXdhcmVzKSkpKSk7XG4gIC8qIFN1cGUgdXAgZGlzcGF0Y2ggd2l0aCBjYWxsYmFjayBwcm9taXNlIHJlc29sdmVyLiBIYXBwZW5zIGluIGVucmljaE1ldGEgKi9cblxuICBmdW5jdGlvbiBlbmhhbmNlRGlzcGF0Y2goZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50LCByZXNvbHZlciwgY2FsbGJhY2tzKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnb3JpZ2luYWwgZXZlbnQnLCBldmVudClcbiAgICAgIHZhciBtZXRhID0gZ2VuZXJhdGVNZXRhKGV2ZW50Lm1ldGEsIHJlc29sdmVyLCBlbnN1cmVBcnJheShjYWxsYmFja3MpKTsgLy8gaWYgKHJlc29sdmVyKSBjb25zb2xlLmxvZygnZGlzcGF0Y2ggcmVzb2x2ZXInLCByZXNvbHZlcilcbiAgICAgIC8vIGlmIChjYWxsYmFja3MpIGNvbnNvbGUubG9nKCdkaXNwYXRjaCBjYWxsYmFja3MnLCBjYWxsYmFja3MpXG5cbiAgICAgIHZhciBuZXdFdmVudCA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBldmVudCksIHtcbiAgICAgICAgbWV0YTogbWV0YVxuICAgICAgfSk7IC8vIGNvbnNvbGUubG9nKCduZXdFdmVudCcsIG5ld0V2ZW50KVxuXG5cbiAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBbbmV3RXZlbnRdKTtcbiAgICB9O1xuICB9IC8vIEF1dG9tYXRpY2FsbHkgYXBwbHkgbWV0YSB0byBkaXNwYXRjaCBjYWxsc1xuXG5cbiAgc3RvcmUuZGlzcGF0Y2ggPSBlbmhhbmNlRGlzcGF0Y2goc3RvcmUuZGlzcGF0Y2gpO1xuICAvKiBTeW5jaHJvbm91c2x5IGNhbGwgYm9vdHN0cmFwICYgcmVnaXN0ZXIgUGx1Z2luIG1ldGhvZHMgKi9cblxuICB2YXIgcGx1Z2luS2V5cyA9IE9iamVjdC5rZXlzKGN1c3RvbVBsdWdpbnMpO1xuICAvKiBCb290c3RyYXAgYW5hbHl0aWMgcGx1Z2lucyAqL1xuXG4gIHN0b3JlLmRpc3BhdGNoKHtcbiAgICB0eXBlOiBFVkVOVFMkMS5ib290c3RyYXAsXG4gICAgcGx1Z2luczogcGx1Z2luS2V5cyxcbiAgICBjb25maWc6IGluaXRpYWxDb25maWcsXG4gICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgdXNlcjogdmlzaXRvckluZm8sXG4gICAgaW5pdGlhbFVzZXI6IGluaXRpYWxVc2VyLFxuICAgIHBlcnNpc3RlZFVzZXI6IHBlcnNpc3RlZFVzZXJcbiAgfSk7XG4gIHZhciBlbmFibGVkUGx1Z2lucyA9IHBsdWdpbktleXMuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHBhcnNlZE9wdGlvbnMucGx1Z2luRW5hYmxlZFtuYW1lXTtcbiAgfSk7XG4gIHZhciBkaXNhYmxlZFBsdWdpbnMgPSBwbHVnaW5LZXlzLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiAhcGFyc2VkT3B0aW9ucy5wbHVnaW5FbmFibGVkW25hbWVdO1xuICB9KTtcbiAgLyogUmVnaXN0ZXIgYW5hbHl0aWMgcGx1Z2lucyAqL1xuXG4gIHN0b3JlLmRpc3BhdGNoKHtcbiAgICB0eXBlOiBFVkVOVFMkMS5yZWdpc3RlclBsdWdpbnMsXG4gICAgcGx1Z2luczogcGx1Z2luS2V5cyxcbiAgICBlbmFibGVkOiBwYXJzZWRPcHRpb25zLnBsdWdpbkVuYWJsZWRcbiAgfSk7XG4gIC8qIGRpc3BhdGNoIHJlZ2lzdGVyIGZvciBpbmRpdmlkdWFsIHBsdWdpbnMgKi9cblxuICBwYXJzZWRPcHRpb25zLnBsdWdpbnNBcnJheS5tYXAoZnVuY3Rpb24gKHBsdWdpbiwgaSkge1xuICAgIHZhciBib290c3RyYXAgPSBwbHVnaW4uYm9vdHN0cmFwLFxuICAgICAgICBjb25maWcgPSBwbHVnaW4uY29uZmlnLFxuICAgICAgICBuYW1lID0gcGx1Z2luLm5hbWU7XG5cbiAgICBpZiAoYm9vdHN0cmFwICYmIGlzRnVuY3Rpb24oYm9vdHN0cmFwKSkge1xuICAgICAgYm9vdHN0cmFwKHtcbiAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcGF5bG9hZDogcGx1Z2luXG4gICAgICB9KTtcbiAgICB9XG4gICAgLyogUmVnaXN0ZXIgcGx1Z2lucyAqL1xuXG5cbiAgICBzdG9yZS5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiBFVkVOVFMkMS5yZWdpc3RlclBsdWdpblR5cGUobmFtZSksXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgZW5hYmxlZDogcGFyc2VkT3B0aW9ucy5wbHVnaW5FbmFibGVkW25hbWVdLFxuICAgICAgcGx1Z2luOiBwbHVnaW5cbiAgICB9KTtcbiAgICAvKiBBbGwgcGx1Z2lucyByZWdpc3RlcmVkIGluaXRpYWxpemUsIGlzIGxhc3QgbG9vcCAqL1xuXG4gICAgaWYgKHBhcnNlZE9wdGlvbnMucGx1Z2luc0FycmF5Lmxlbmd0aCA9PT0gaSArIDEpIHtcbiAgICAgIHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRVZFTlRTJDEuaW5pdGlhbGl6ZVN0YXJ0LFxuICAgICAgICBwbHVnaW5zOiBlbmFibGVkUGx1Z2lucyxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkUGx1Z2luc1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICB7XG4gICAgLyogV2F0Y2ggZm9yIG5ldHdvcmsgZXZlbnRzICovXG4gICAgd2F0Y2goZnVuY3Rpb24gKG9mZmxpbmUpIHtcbiAgICAgIHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogb2ZmbGluZSA/IEVWRU5UUyQxLm9mZmxpbmUgOiBFVkVOVFMkMS5vbmxpbmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8qIFRpY2sgaGVhcnRiZWF0IGZvciBxdWV1ZWQgZXZlbnRzICovXG5cbiAgICBoZWFydEJlYXQoc3RvcmUsIGdldFBsdWdpbnMsIGluc3RhbmNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGVuZEFyZ3VtZW50cyhmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAvKiBHZXQgb3JpZ2luYWwgYXJncyAqL1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgLyogQ3JlYXRlIGNsb25lIG9mIGFyZ3MgKi9cblxuICAgICAgdmFyIG5ld0FyZ3MgPSBuZXcgQXJyYXkoZm4ubGVuZ3RoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5ld0FyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgfVxuICAgICAgLyogQXBwZW5kIG5ldyBhcmcgdG8gZW5kICovXG5cblxuICAgICAgbmV3QXJnc1tuZXdBcmdzLmxlbmd0aF0gPSBpbnN0YW5jZTsgLy8gU2V0IGluc3RhbmNlIG9uIGV4dGVuZGVkIG1ldGhvZHNcblxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHtcbiAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICB9LCBuZXdBcmdzKTtcbiAgICB9O1xuICB9XG4gIC8qIFJldHVybiBhbmFseXRpY3MgaW5zdGFuY2UgKi9cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn0gLy8gRHVwbGljYXRlZCBzdHJpbmdzXG5cblxudmFyIGJlZm9yZSA9ICdiZWZvcmUnO1xudmFyIGFmdGVyID0gJ2FmdGVyJztcblxuZXhwb3J0IHsgYW5hbHl0aWNzIGFzIEFuYWx5dGljcywgY29uc3RhbnRzIGFzIENPTlNUQU5UUywgRVZFTlRTJDEgYXMgRVZFTlRTLCBhbmFseXRpY3MgYXMgZGVmYXVsdCwgYW5hbHl0aWNzIGFzIGluaXQgfTtcbiIsImltcG9ydHtzZXQgYXMgZSxnZXQgYXMgbyxyZW1vdmUgYXMgbn1mcm9tXCJAYW5hbHl0aWNzL2dsb2JhbC1zdG9yYWdlLXV0aWxzXCI7dmFyIHQ9XCJjb29raWVcIixpPWEoKSxyPWQsYz1kO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGk/ZChlLFwiXCIsLTEpOm4oZSl9ZnVuY3Rpb24gYSgpe2lmKHZvaWQgMCE9PWkpcmV0dXJuIGk7dmFyIGU9dCt0O3RyeXtkKGUsZSksaT0tMSE9PWRvY3VtZW50LmNvb2tpZS5pbmRleE9mKGUpLHUoZSl9Y2F0Y2goZSl7aT0hMX1yZXR1cm4gaX1mdW5jdGlvbiBkKG4sdCxyLGMsdSxhKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjE7cmV0dXJuITE9PT1pJiYoZD9lKG4sdCk6byhuKSksZD9kb2N1bWVudC5jb29raWU9bitcIj1cIitlbmNvZGVVUklDb21wb25lbnQodCkrKHI/XCI7IGV4cGlyZXM9XCIrbmV3IERhdGUoK25ldyBEYXRlKzFlMypyKS50b1VUQ1N0cmluZygpKyhjP1wiOyBwYXRoPVwiK2M6XCJcIikrKHU/XCI7IGRvbWFpbj1cIit1OlwiXCIpKyhhP1wiOyBzZWN1cmVcIjpcIlwiKTpcIlwiKTpkZWNvZGVVUklDb21wb25lbnQoKChcIjsgXCIrZG9jdW1lbnQuY29va2llKS5zcGxpdChcIjsgXCIrbitcIj1cIilbMV18fFwiXCIpLnNwbGl0KFwiO1wiKVswXSl9fWV4cG9ydHt0IGFzIENPT0tJRSxyIGFzIGdldENvb2tpZSxhIGFzIGhhc0Nvb2tpZXMsdSBhcyByZW1vdmVDb29raWUsYyBhcyBzZXRDb29raWV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5hbHl0aWNzLXV0aWwtY29va2llLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydHtoYXNTdXBwb3J0IGFzIHQsd3JhcCBhcyBlLGdldCBhcyBsLHNldCBhcyBvLHJlbW92ZSBhcyBhfWZyb21cIkBhbmFseXRpY3MvZ2xvYmFsLXN0b3JhZ2UtdXRpbHNcIjt2YXIgcj1cImxvY2FsU3RvcmFnZVwiLG09dC5iaW5kKG51bGwsciksZz1lKHIsXCJnZXRJdGVtXCIsbCksaT1lKHIsXCJzZXRJdGVtXCIsbykscz1lKHIsXCJyZW1vdmVJdGVtXCIsYSk7ZXhwb3J0e3IgYXMgTE9DQUxfU1RPUkFHRSxnIGFzIGdldEl0ZW0sbSBhcyBoYXNMb2NhbFN0b3JhZ2UscyBhcyByZW1vdmVJdGVtLGkgYXMgc2V0SXRlbX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmFseXRpY3MtdXRpbC1sb2NhbHN0b3JhZ2UubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e2hhc1N1cHBvcnQgYXMgZSx3cmFwIGFzIHMsZ2V0IGFzIG8sc2V0IGFzIHQscmVtb3ZlIGFzIHJ9ZnJvbVwiQGFuYWx5dGljcy9nbG9iYWwtc3RvcmFnZS11dGlsc1wiO3ZhciBhPVwic2Vzc2lvblN0b3JhZ2VcIixpPWUuYmluZChudWxsLFwic2Vzc2lvblN0b3JhZ2VcIiksZz1zKFwic2Vzc2lvblN0b3JhZ2VcIixcImdldEl0ZW1cIixvKSxuPXMoXCJzZXNzaW9uU3RvcmFnZVwiLFwic2V0SXRlbVwiLHQpLGw9cyhcInNlc3Npb25TdG9yYWdlXCIsXCJyZW1vdmVJdGVtXCIscik7ZXhwb3J0e2EgYXMgU0VTU0lPTl9TVE9SQUdFLGcgYXMgZ2V0U2Vzc2lvbkl0ZW0saSBhcyBoYXNTZXNzaW9uU3RvcmFnZSxsIGFzIHJlbW92ZVNlc3Npb25JdGVtLG4gYXMgc2V0U2Vzc2lvbkl0ZW19O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5hbHl0aWNzLXV0aWwtc2Vzc2lvbi1zdG9yYWdlLm1vZHVsZS5qcy5tYXBcbiIsInZhciBuLGU9XCJmdW5jdGlvblwiLHQ9XCJzdHJpbmdcIixvPVwidW5kZWZpbmVkXCIscj1cImJvb2xlYW5cIixpPVwib2JqZWN0XCIsdT1cImFycmF5XCIsYz1cIm51bWJlclwiLGE9ZnVuY3Rpb24oKXt9LGY9XCJhbnlcIixsPVwiKlwiLHM9XCJub25lXCIsZD1cImhpZGRlblwiLHA9XCJfX1wiLHk9XCJmb3JtXCIsZz1cImlucHV0XCIsYj1cImJ1dHRvblwiLG09XCJzZWxlY3RcIix2PVwiY2hhbmdlXCIsaj1cInN1Ym1pdFwiLGg9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3M/cHJvY2Vzczp7fSxBPShudWxsPT0obj1oLmVudik/dm9pZCAwOm4uTk9ERV9FTlYpfHxcIlwiLE89XCJwcm9kdWN0aW9uXCI9PT1BLHc9XCJzdGFnaW5nXCI9PT1BLFo9XCJkZXZlbG9wbWVudFwiPT09QSx6PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csTj16JiZcImxvY2FsaG9zdFwiPT09d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFA9bnVsbCE9aC52ZXJzaW9ucyYmbnVsbCE9aC52ZXJzaW9ucy5ub2RlLFM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIERlbm8mJnZvaWQgMCE9PURlbm8uY29yZSxEPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLmNvbnN0cnVjdG9yJiZcIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXCI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUsRT16JiZcIm5vZGVqc1wiPT09d2luZG93Lm5hbWV8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJihuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKFwiTm9kZS5qc1wiKXx8bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcyhcImpzZG9tXCIpKTtmdW5jdGlvbiBDKG4sZSl7cmV0dXJuIHR5cGVvZiBlPT09bn12YXIgXz1DLmJpbmQobnVsbCxcImZ1bmN0aW9uXCIpLEw9Qy5iaW5kKG51bGwsXCJzdHJpbmdcIiksJD1DLmJpbmQobnVsbCxcInVuZGVmaW5lZFwiKSx4PUMuYmluZChudWxsLFwiYm9vbGVhblwiKTtmdW5jdGlvbiBGKG4pe3JldHVybiBudWxsPT09bn1mdW5jdGlvbiBUKG4pe3JldHVybiFpc05hTihwYXJzZUZsb2F0KG4pKX1mdW5jdGlvbiBrKG4pe3JldHVybiEhXyhuKSYmL15jbGFzcyAvLnRlc3QoRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikpfWZ1bmN0aW9uIEcobil7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pfWZ1bmN0aW9uIEgobil7cmV0dXJuIG4mJihcIm9iamVjdFwiPT10eXBlb2Ygbnx8bnVsbCE9PW4pfWZ1bmN0aW9uIE0obil7aWYoIUgobikpcmV0dXJuITE7Zm9yKHZhciBlPW47bnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTspZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuKT09PWV9ZnVuY3Rpb24gUihuKXtpZihGKG4pKXJldHVybiEwO3N3aXRjaCh0eXBlb2Ygbil7Y2FzZVwic3RyaW5nXCI6Y2FzZVwibnVtYmVyXCI6Y2FzZVwic3ltYm9sXCI6Y2FzZVwidW5kZWZpbmVkXCI6Y2FzZVwiYm9vbGVhblwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFUobil7cmV0dXJuISFuJiYhISghJChQcm9taXNlKSYmbiBpbnN0YW5jZW9mIFByb21pc2V8fG4udGhlbiYmXyhuLnRoZW4pKX1mdW5jdGlvbiBWKG4pe3JldHVybiBuIGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIFcobil7cmV0dXJuIEgobikmJkwobi5tZXNzYWdlKSYmTChuLm5hbWUpfWZ1bmN0aW9uIHEobil7aWYoIV8obikpcmV0dXJuITE7dmFyIGU9L3soXFxyfFxcbnxcXHMpKn0vZ20sdD1hK1wiXCI7cmV0dXJuIHQ9PT0obi50b1N0cmluZygpLm1hdGNoKGUpfHxbXCJcIl0pWzBdLnJlcGxhY2UoZSx0KX1mdW5jdGlvbiBCKG4pe3JldHVybiEoTChuKSYmXCJmYWxzZVwiPT09bi50b0xvd2VyQ2FzZSgpfHwhbil9ZnVuY3Rpb24gSShuKXtyZXR1cm4hKG4ubGVuZ3RoPjMyMCkmJi9eW2EtekEtWjAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLnRlc3Qobil9ZnVuY3Rpb24gSihuKXtyZXR1cm4vXlxcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkXFwuXFxkKyhbKy1dWzAtMl1cXGQ6WzAtNV1cXGR8WikkLy50ZXN0KG4pfWZ1bmN0aW9uIEsobil7cmV0dXJuIE5vZGVMaXN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG4pfWZ1bmN0aW9uIFEobixlKXt2YXIgdD1uIGluc3RhbmNlb2YgRWxlbWVudHx8biBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudDtyZXR1cm4gdCYmZT9YKG4sZSk6dH1mdW5jdGlvbiBYKG4sZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPVwiXCIpLG4mJm4ubm9kZU5hbWU9PT1lLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gWShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseSh2b2lkIDAsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSkpfX12YXIgbm49WShRKSxlbj1ZKFEpLHRuPVkoUSksb249WShRKTtmdW5jdGlvbiBybihuLGUpe2lmKCFufHxcImhpZGRlblwiPT09Z2V0Q29tcHV0ZWRTdHlsZShuKS52aXNpYmlsaXR5KXJldHVybiEwO2Zvcig7bjspe2lmKG51bGwhPWUmJm49PT1lKXJldHVybiExO2lmKFwibm9uZVwiPT09Z2V0Q29tcHV0ZWRTdHlsZShuKS5kaXNwbGF5KXJldHVybiEwO249bi5wYXJlbnRFbGVtZW50fXJldHVybiExfWV4cG9ydHtsIGFzIEFMTCxmIGFzIEFOWSx1IGFzIEFSUkFZLHIgYXMgQk9PTEVBTixiIGFzIEJVVFRPTix2IGFzIENIQU5HRSxBIGFzIEVOVix5IGFzIEZPUk0sZSBhcyBGVU5DVElPTixkIGFzIEhJRERFTixnIGFzIElOUFVULHMgYXMgTk9ORSxjIGFzIE5VTUJFUixpIGFzIE9CSkVDVCxwIGFzIFBSRUZJWCxtIGFzIFNFTEVDVCx0IGFzIFNUUklORyxqIGFzIFNVQk1JVCxvIGFzIFVOREVGSU5FRCxHIGFzIGlzQXJyYXkseCBhcyBpc0Jvb2xlYW4seiBhcyBpc0Jyb3dzZXIsZW4gYXMgaXNCdXR0b24sayBhcyBpc0NsYXNzLFMgYXMgaXNEZW5vLFogYXMgaXNEZXYsUSBhcyBpc0VsZW1lbnQsSSBhcyBpc0VtYWlsLFcgYXMgaXNFcnJvckxpa2Usbm4gYXMgaXNGb3JtLF8gYXMgaXNGdW5jdGlvbixybiBhcyBpc0hpZGRlbix0biBhcyBpc0lucHV0LEogYXMgaXNJc29EYXRlLEUgYXMgaXNKc0RvbSxOIGFzIGlzTG9jYWxIb3N0LHEgYXMgaXNOb09wLFAgYXMgaXNOb2RlLEsgYXMgaXNOb2RlTGlzdCxYIGFzIGlzTm9kZVR5cGUsRiBhcyBpc051bGwsVCBhcyBpc051bWJlcixNIGFzIGlzT2JqZWN0LEggYXMgaXNPYmplY3RMaWtlLFIgYXMgaXNQcmltaXRpdmUsTyBhcyBpc1Byb2QsVSBhcyBpc1Byb21pc2UsViBhcyBpc1JlZ2V4LG9uIGFzIGlzU2VsZWN0LHcgYXMgaXNTdGFnaW5nLEwgYXMgaXNTdHJpbmcsQiBhcyBpc1RydXRoeSwkIGFzIGlzVW5kZWZpbmVkLEQgYXMgaXNXZWJXb3JrZXIsYSBhcyBub09wLEMgYXMgdHlwZU9mfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuYWx5dGljcy11dGlsLXR5cGVzLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydHtnZXQgYXMgdCxHTE9CQUwgYXMgbyxzZXQgYXMgZSxyZW1vdmUgYXMgcn1mcm9tXCJAYW5hbHl0aWNzL2dsb2JhbC1zdG9yYWdlLXV0aWxzXCI7ZXhwb3J0e0dMT0JBTCxnbG9iYWxDb250ZXh0fWZyb21cIkBhbmFseXRpY3MvZ2xvYmFsLXN0b3JhZ2UtdXRpbHNcIjtpbXBvcnR7aGFzQ29va2llcyBhcyBhLENPT0tJRSBhcyBpLGdldENvb2tpZSBhcyBuLHNldENvb2tpZSBhcyBzLHJlbW92ZUNvb2tpZSBhcyBsfWZyb21cIkBhbmFseXRpY3MvY29va2llLXV0aWxzXCI7ZXhwb3J0e0NPT0tJRSxnZXRDb29raWUsaGFzQ29va2llcyxyZW1vdmVDb29raWUsc2V0Q29va2llfWZyb21cIkBhbmFseXRpY3MvY29va2llLXV0aWxzXCI7aW1wb3J0e2hhc0xvY2FsU3RvcmFnZSBhcyB1LExPQ0FMX1NUT1JBR0UgYXMgY31mcm9tXCJAYW5hbHl0aWNzL2xvY2Fsc3RvcmFnZS11dGlsc1wiO2V4cG9ydHtMT0NBTF9TVE9SQUdFLGhhc0xvY2FsU3RvcmFnZX1mcm9tXCJAYW5hbHl0aWNzL2xvY2Fsc3RvcmFnZS11dGlsc1wiO2ltcG9ydHtoYXNTZXNzaW9uU3RvcmFnZSBhcyBnLFNFU1NJT05fU1RPUkFHRSBhcyBmfWZyb21cIkBhbmFseXRpY3Mvc2Vzc2lvbi1zdG9yYWdlLXV0aWxzXCI7aW1wb3J0e2lzT2JqZWN0IGFzIG0sQU5ZIGFzIFMsQUxMIGFzIHAsaXNVbmRlZmluZWQgYXMgdixpc1N0cmluZyBhcyB5fWZyb21cIkBhbmFseXRpY3MvdHlwZS11dGlsc1wiO2V4cG9ydHtBTEwsQU5ZfWZyb21cIkBhbmFseXRpY3MvdHlwZS11dGlsc1wiO2Z1bmN0aW9uIEkodCl7dmFyIG89dDt0cnl7aWYoXCJ0cnVlXCI9PT0obz1KU09OLnBhcnNlKHQpKSlyZXR1cm4hMDtpZihcImZhbHNlXCI9PT1vKXJldHVybiExO2lmKG0obykpcmV0dXJuIG87cGFyc2VGbG9hdChvKT09PW8mJihvPXBhcnNlRmxvYXQobykpfWNhdGNoKHQpe31pZihudWxsIT09byYmXCJcIiE9PW8pcmV0dXJuIG99dmFyIGs9dSgpLHg9ZygpLEM9YSgpO2Z1bmN0aW9uIEwobyxlKXtpZihvKXt2YXIgcj1BKGUpLGE9IUUociksaT1kKHIpP0kobG9jYWxTdG9yYWdlLmdldEl0ZW0obykpOnZvaWQgMDtpZihhJiYhdihpKSlyZXR1cm4gaTt2YXIgcz1oKHIpP0kobihvKSk6dm9pZCAwO2lmKGEmJnMpcmV0dXJuIHM7dmFyIGw9TihyKT9JKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0obykpOnZvaWQgMDtpZihhJiZsKXJldHVybiBsO3ZhciB1PXQobyk7cmV0dXJuIGE/dTp7bG9jYWxTdG9yYWdlOmksc2Vzc2lvblN0b3JhZ2U6bCxjb29raWU6cyxnbG9iYWw6dX19fWZ1bmN0aW9uIE8ocixhLGwpe2lmKHImJiF2KGEpKXt2YXIgdT17fSxnPUEobCksbT1KU09OLnN0cmluZ2lmeShhKSxTPSFFKGcpO3JldHVybiBkKGcpJiYodVtjXT1HKGMsYSxJKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHIpKSksbG9jYWxTdG9yYWdlLnNldEl0ZW0ocixtKSxTKT91W2NdOmgoZykmJih1W2ldPUcoaSxhLEkobihyKSkpLHMocixtKSxTKT91W2ldOk4oZykmJih1W2ZdPUcoZixhLEkoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShyKSkpLHNlc3Npb25TdG9yYWdlLnNldEl0ZW0ocixtKSxTKT91W2ZdOih1W29dPUcobyxhLHQocikpLGUocixhKSxTP3Vbb106dSl9fWZ1bmN0aW9uIGIodCxlKXtpZih0KXt2YXIgYT1BKGUpLG49TCh0LHApLHM9e307cmV0dXJuIXYobi5sb2NhbFN0b3JhZ2UpJiZkKGEpJiYobG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odCksc1tjXT1uLmxvY2FsU3RvcmFnZSksIXYobi5jb29raWUpJiZoKGEpJiYobCh0KSxzW2ldPW4uY29va2llKSwhdihuLnNlc3Npb25TdG9yYWdlKSYmTihhKSYmKHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odCksc1tmXT1uLnNlc3Npb25TdG9yYWdlKSwhdihuLmdsb2JhbCkmJkYoYSxvKSYmKHIodCksc1tvXT1uLmdsb2JhbCksc319ZnVuY3Rpb24gQSh0KXtyZXR1cm4gdD95KHQpP3Q6dC5zdG9yYWdlOlN9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gayYmRih0LGMpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIEMmJkYodCxpKX1mdW5jdGlvbiBOKHQpe3JldHVybiB4JiZGKHQsZil9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdD09PXB8fFwiYWxsXCI9PT10fWZ1bmN0aW9uIEYodCxvKXtyZXR1cm4gdD09PVN8fHQ9PT1vfHxFKHQpfWZ1bmN0aW9uIEcodCxvLGUpe3JldHVybntsb2NhdGlvbjp0LGN1cnJlbnQ6byxwcmV2aW91czplfX12YXIgSj17c2V0SXRlbTpPLGdldEl0ZW06TCxyZW1vdmVJdGVtOmJ9O2V4cG9ydCBkZWZhdWx0IEo7ZXhwb3J0e0wgYXMgZ2V0SXRlbSxiIGFzIHJlbW92ZUl0ZW0sTyBhcyBzZXRJdGVtfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuYWx5dGljcy11dGlsLXN0b3JhZ2UubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IGFuYWx5dGljcyBmcm9tICdAYW5hbHl0aWNzL2NvcmUnO1xuZXhwb3J0IHsgQ09OU1RBTlRTLCBFVkVOVFMgfSBmcm9tICdAYW5hbHl0aWNzL2NvcmUnO1xuaW1wb3J0IHN0b3JhZ2UgZnJvbSAnQGFuYWx5dGljcy9zdG9yYWdlLXV0aWxzJztcblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gYW5hbHl0aWNzTGliKCkge1xuICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBkZWZhdWx0U2V0dGluZ3MgPSB7XG4gICAgc3RvcmFnZTogc3RvcmFnZVxuICB9O1xuICByZXR1cm4gYW5hbHl0aWNzKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBkZWZhdWx0U2V0dGluZ3MpLCBvcHRzKSk7XG59XG5cbmV4cG9ydCB7IGFuYWx5dGljc0xpYiBhcyBBbmFseXRpY3MsIGFuYWx5dGljc0xpYiBhcyBkZWZhdWx0LCBhbmFseXRpY3NMaWIgYXMgaW5pdCB9O1xuIiwiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSBcIi4vZGVmaW5lUHJvcGVydHkuanNcIjtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikge1xuICB2YXIgdCA9IE9iamVjdC5rZXlzKGUpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtcbiAgICByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7XG4gICAgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMihlKSB7XG4gIGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7XG4gICAgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9O1xuICAgIHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTtcbiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9vYmplY3RTcHJlYWQyIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfT3ZlcmxvYWRZaWVsZChlLCBkKSB7XG4gIHRoaXMudiA9IGUsIHRoaXMuayA9IGQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9PdmVybG9hZFlpZWxkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3JlZ2VuZXJhdG9yRGVmaW5lKGUsIHIsIG4sIHQpIHtcbiAgdmFyIGkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4gIHRyeSB7XG4gICAgaSh7fSwgXCJcIiwge30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JEZWZpbmUgPSBmdW5jdGlvbiByZWdlbmVyYXRvckRlZmluZShlLCByLCBuLCB0KSB7XG4gICAgZnVuY3Rpb24gbyhyLCBuKSB7XG4gICAgICBfcmVnZW5lcmF0b3JEZWZpbmUoZSwgciwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShyLCBuLCBlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByID8gaSA/IGkoZSwgciwge1xuICAgICAgdmFsdWU6IG4sXG4gICAgICBlbnVtZXJhYmxlOiAhdCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIXQsXG4gICAgICB3cml0YWJsZTogIXRcbiAgICB9KSA6IGVbcl0gPSBuIDogKG8oXCJuZXh0XCIsIDApLCBvKFwidGhyb3dcIiwgMSksIG8oXCJyZXR1cm5cIiwgMikpO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF9yZWdlbmVyYXRvckRlZmluZShlLCByLCBuLCB0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yRGVmaW5lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHJlZ2VuZXJhdG9yRGVmaW5lID0gcmVxdWlyZShcIi4vcmVnZW5lcmF0b3JEZWZpbmUuanNcIik7XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3IoKSB7XG4gIC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vYmFiZWwvYmFiZWwvYmxvYi9tYWluL3BhY2thZ2VzL2JhYmVsLWhlbHBlcnMvTElDRU5TRSAqL1xuICB2YXIgZSxcbiAgICB0LFxuICAgIHIgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIG4gPSByLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIG8gPSByLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBpKHIsIG4sIG8sIGkpIHtcbiAgICB2YXIgYyA9IG4gJiYgbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBuIDogR2VuZXJhdG9yLFxuICAgICAgdSA9IE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpO1xuICAgIHJldHVybiByZWdlbmVyYXRvckRlZmluZSh1LCBcIl9pbnZva2VcIiwgZnVuY3Rpb24gKHIsIG4sIG8pIHtcbiAgICAgIHZhciBpLFxuICAgICAgICBjLFxuICAgICAgICB1LFxuICAgICAgICBmID0gMCxcbiAgICAgICAgcCA9IG8gfHwgW10sXG4gICAgICAgIHkgPSAhMSxcbiAgICAgICAgRyA9IHtcbiAgICAgICAgICBwOiAwLFxuICAgICAgICAgIG46IDAsXG4gICAgICAgICAgdjogZSxcbiAgICAgICAgICBhOiBkLFxuICAgICAgICAgIGY6IGQuYmluZChlLCA0KSxcbiAgICAgICAgICBkOiBmdW5jdGlvbiBkKHQsIHIpIHtcbiAgICAgICAgICAgIHJldHVybiBpID0gdCwgYyA9IDAsIHUgPSBlLCBHLm4gPSByLCBhO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIGQociwgbikge1xuICAgICAgICBmb3IgKGMgPSByLCB1ID0gbiwgdCA9IDA7ICF5ICYmIGYgJiYgIW8gJiYgdCA8IHAubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICB2YXIgbyxcbiAgICAgICAgICAgIGkgPSBwW3RdLFxuICAgICAgICAgICAgZCA9IEcucCxcbiAgICAgICAgICAgIGwgPSBpWzJdO1xuICAgICAgICAgIHIgPiAzID8gKG8gPSBsID09PSBuKSAmJiAodSA9IGlbKGMgPSBpWzRdKSA/IDUgOiAoYyA9IDMsIDMpXSwgaVs0XSA9IGlbNV0gPSBlKSA6IGlbMF0gPD0gZCAmJiAoKG8gPSByIDwgMiAmJiBkIDwgaVsxXSkgPyAoYyA9IDAsIEcudiA9IG4sIEcubiA9IGlbMV0pIDogZCA8IGwgJiYgKG8gPSByIDwgMyB8fCBpWzBdID4gbiB8fCBuID4gbCkgJiYgKGlbNF0gPSByLCBpWzVdID0gbiwgRy5uID0gbCwgYyA9IDApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobyB8fCByID4gMSkgcmV0dXJuIGE7XG4gICAgICAgIHRocm93IHkgPSAhMCwgbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiAobywgcCwgbCkge1xuICAgICAgICBpZiAoZiA+IDEpIHRocm93IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICAgIGZvciAoeSAmJiAxID09PSBwICYmIGQocCwgbCksIGMgPSBwLCB1ID0gbDsgKHQgPSBjIDwgMiA/IGUgOiB1KSB8fCAheTspIHtcbiAgICAgICAgICBpIHx8IChjID8gYyA8IDMgPyAoYyA+IDEgJiYgKEcubiA9IC0xKSwgZChjLCB1KSkgOiBHLm4gPSB1IDogRy52ID0gdSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMiwgaSkge1xuICAgICAgICAgICAgICBpZiAoYyB8fCAobyA9IFwibmV4dFwiKSwgdCA9IGlbb10pIHtcbiAgICAgICAgICAgICAgICBpZiAoISh0ID0gdC5jYWxsKGksIHUpKSkgdGhyb3cgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICAgICAgICAgICAgaWYgKCF0LmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgICAgIHUgPSB0LnZhbHVlLCBjIDwgMiAmJiAoYyA9IDApO1xuICAgICAgICAgICAgICB9IGVsc2UgMSA9PT0gYyAmJiAodCA9IGlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbChpKSwgYyA8IDIgJiYgKHUgPSBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG8gKyBcIicgbWV0aG9kXCIpLCBjID0gMSk7XG4gICAgICAgICAgICAgIGkgPSBlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgodCA9ICh5ID0gRy5uIDwgMCkgPyB1IDogci5jYWxsKG4sIEcpKSAhPT0gYSkgYnJlYWs7XG4gICAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgICAgaSA9IGUsIGMgPSAxLCB1ID0gdDtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZiA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogeVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9KHIsIG8sIGkpLCAhMCksIHU7XG4gIH1cbiAgdmFyIGEgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBjID0gW11bbl0gPyB0KHQoW11bbl0oKSkpIDogKHJlZ2VuZXJhdG9yRGVmaW5lKHQgPSB7fSwgbiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSksIHQpLFxuICAgIHUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjKTtcbiAgZnVuY3Rpb24gZihlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihlLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAoZS5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgcmVnZW5lcmF0b3JEZWZpbmUoZSwgbywgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh1KSwgZTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHJlZ2VuZXJhdG9yRGVmaW5lKHUsIFwiY29uc3RydWN0b3JcIiwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpLCByZWdlbmVyYXRvckRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCBHZW5lcmF0b3JGdW5jdGlvbiksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiLCByZWdlbmVyYXRvckRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgbywgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgcmVnZW5lcmF0b3JEZWZpbmUodSksIHJlZ2VuZXJhdG9yRGVmaW5lKHUsIG8sIFwiR2VuZXJhdG9yXCIpLCByZWdlbmVyYXRvckRlZmluZSh1LCBuLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCByZWdlbmVyYXRvckRlZmluZSh1LCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIChtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvciA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdzogaSxcbiAgICAgIG06IGZcbiAgICB9O1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBPdmVybG9hZFlpZWxkID0gcmVxdWlyZShcIi4vT3ZlcmxvYWRZaWVsZC5qc1wiKTtcbnZhciByZWdlbmVyYXRvckRlZmluZSA9IHJlcXVpcmUoXCIuL3JlZ2VuZXJhdG9yRGVmaW5lLmpzXCIpO1xuZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gIGZ1bmN0aW9uIG4ociwgbywgaSwgZikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgYyA9IHRbcl0obyksXG4gICAgICAgIHUgPSBjLnZhbHVlO1xuICAgICAgcmV0dXJuIHUgaW5zdGFuY2VvZiBPdmVybG9hZFlpZWxkID8gZS5yZXNvbHZlKHUudikudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICBuKFwibmV4dFwiLCB0LCBpLCBmKTtcbiAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIG4oXCJ0aHJvd1wiLCB0LCBpLCBmKTtcbiAgICAgIH0pIDogZS5yZXNvbHZlKHUpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgYy52YWx1ZSA9IHQsIGkoYyk7XG4gICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gbihcInRocm93XCIsIHQsIGksIGYpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgZih0KTtcbiAgICB9XG4gIH1cbiAgdmFyIHI7XG4gIHRoaXMubmV4dCB8fCAocmVnZW5lcmF0b3JEZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLCByZWdlbmVyYXRvckRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAYXN5bmNJdGVyYXRvclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pKSwgcmVnZW5lcmF0b3JEZWZpbmUodGhpcywgXCJfaW52b2tlXCIsIGZ1bmN0aW9uICh0LCBvLCBpKSB7XG4gICAgZnVuY3Rpb24gZigpIHtcbiAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICBuKHQsIGksIGUsIHIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByID0gciA/IHIudGhlbihmLCBmKSA6IGYoKTtcbiAgfSwgITApO1xufVxubW9kdWxlLmV4cG9ydHMgPSBBc3luY0l0ZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHJlZ2VuZXJhdG9yID0gcmVxdWlyZShcIi4vcmVnZW5lcmF0b3IuanNcIik7XG52YXIgcmVnZW5lcmF0b3JBc3luY0l0ZXJhdG9yID0gcmVxdWlyZShcIi4vcmVnZW5lcmF0b3JBc3luY0l0ZXJhdG9yLmpzXCIpO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yQXN5bmNHZW4ociwgZSwgdCwgbywgbikge1xuICByZXR1cm4gbmV3IHJlZ2VuZXJhdG9yQXN5bmNJdGVyYXRvcihyZWdlbmVyYXRvcigpLncociwgZSwgdCwgbyksIG4gfHwgUHJvbWlzZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvckFzeW5jR2VuLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHJlZ2VuZXJhdG9yQXN5bmNHZW4gPSByZXF1aXJlKFwiLi9yZWdlbmVyYXRvckFzeW5jR2VuLmpzXCIpO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yQXN5bmMobiwgZSwgciwgdCwgbykge1xuICB2YXIgYSA9IHJlZ2VuZXJhdG9yQXN5bmNHZW4obiwgZSwgciwgdCwgbyk7XG4gIHJldHVybiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIG4uZG9uZSA/IG4udmFsdWUgOiBhLm5leHQoKTtcbiAgfSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvckFzeW5jLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3JlZ2VuZXJhdG9yS2V5cyhlKSB7XG4gIHZhciBuID0gT2JqZWN0KGUpLFxuICAgIHIgPSBbXTtcbiAgZm9yICh2YXIgdCBpbiBuKSByLnVuc2hpZnQodCk7XG4gIHJldHVybiBmdW5jdGlvbiBlKCkge1xuICAgIGZvciAoOyByLmxlbmd0aDspIGlmICgodCA9IHIucG9wKCkpIGluIG4pIHJldHVybiBlLnZhbHVlID0gdCwgZS5kb25lID0gITEsIGU7XG4gICAgcmV0dXJuIGUuZG9uZSA9ICEwLCBlO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JLZXlzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JWYWx1ZXMoZSkge1xuICBpZiAobnVsbCAhPSBlKSB7XG4gICAgdmFyIHQgPSBlW1wiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIl0sXG4gICAgICByID0gMDtcbiAgICBpZiAodCkgcmV0dXJuIHQuY2FsbChlKTtcbiAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgIGlmICghaXNOYU4oZS5sZW5ndGgpKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGUgJiYgciA+PSBlLmxlbmd0aCAmJiAoZSA9IHZvaWQgMCksIHtcbiAgICAgICAgICB2YWx1ZTogZSAmJiBlW3IrK10sXG4gICAgICAgICAgZG9uZTogIWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yVmFsdWVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIE92ZXJsb2FkWWllbGQgPSByZXF1aXJlKFwiLi9PdmVybG9hZFlpZWxkLmpzXCIpO1xudmFyIHJlZ2VuZXJhdG9yID0gcmVxdWlyZShcIi4vcmVnZW5lcmF0b3IuanNcIik7XG52YXIgcmVnZW5lcmF0b3JBc3luYyA9IHJlcXVpcmUoXCIuL3JlZ2VuZXJhdG9yQXN5bmMuanNcIik7XG52YXIgcmVnZW5lcmF0b3JBc3luY0dlbiA9IHJlcXVpcmUoXCIuL3JlZ2VuZXJhdG9yQXN5bmNHZW4uanNcIik7XG52YXIgcmVnZW5lcmF0b3JBc3luY0l0ZXJhdG9yID0gcmVxdWlyZShcIi4vcmVnZW5lcmF0b3JBc3luY0l0ZXJhdG9yLmpzXCIpO1xudmFyIHJlZ2VuZXJhdG9yS2V5cyA9IHJlcXVpcmUoXCIuL3JlZ2VuZXJhdG9yS2V5cy5qc1wiKTtcbnZhciByZWdlbmVyYXRvclZhbHVlcyA9IHJlcXVpcmUoXCIuL3JlZ2VuZXJhdG9yVmFsdWVzLmpzXCIpO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIHIgPSByZWdlbmVyYXRvcigpLFxuICAgIGUgPSByLm0oX3JlZ2VuZXJhdG9yUnVudGltZSksXG4gICAgdCA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkgOiBlLl9fcHJvdG9fXykuY29uc3RydWN0b3I7XG4gIGZ1bmN0aW9uIG4ocikge1xuICAgIHZhciBlID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiByICYmIHIuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICEhZSAmJiAoZSA9PT0gdCB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9XG4gIHZhciBvID0ge1xuICAgIFwidGhyb3dcIjogMSxcbiAgICBcInJldHVyblwiOiAyLFxuICAgIFwiYnJlYWtcIjogMyxcbiAgICBcImNvbnRpbnVlXCI6IDNcbiAgfTtcbiAgZnVuY3Rpb24gYShyKSB7XG4gICAgdmFyIGUsIHQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuKSB7XG4gICAgICBlIHx8IChlID0ge1xuICAgICAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgICAgIHJldHVybiB0KG4uYSwgMik7XG4gICAgICAgIH0sXG4gICAgICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKCkge1xuICAgICAgICAgIHJldHVybiBuLnY7XG4gICAgICAgIH0sXG4gICAgICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHIsIGUpIHtcbiAgICAgICAgICByZXR1cm4gdChuLmEsIG9bcl0sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKHIsIG8sIGEpIHtcbiAgICAgICAgICByZXR1cm4gZS5yZXN1bHROYW1lID0gbywgdChuLmQsIHJlZ2VuZXJhdG9yVmFsdWVzKHIpLCBhKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2gocikge1xuICAgICAgICAgIHJldHVybiB0KG4uZiwgcik7XG4gICAgICAgIH1cbiAgICAgIH0sIHQgPSBmdW5jdGlvbiB0KHIsIF90LCBvKSB7XG4gICAgICAgIG4ucCA9IGUucHJldiwgbi5uID0gZS5uZXh0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByKF90LCBvKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBlLm5leHQgPSBuLm47XG4gICAgICAgIH1cbiAgICAgIH0pLCBlLnJlc3VsdE5hbWUgJiYgKGVbZS5yZXN1bHROYW1lXSA9IG4udiwgZS5yZXN1bHROYW1lID0gdm9pZCAwKSwgZS5zZW50ID0gbi52LCBlLm5leHQgPSBuLm47XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gci5jYWxsKHRoaXMsIGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbi5wID0gZS5wcmV2LCBuLm4gPSBlLm5leHQ7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXA6IGZ1bmN0aW9uIHdyYXAoZSwgdCwgbiwgbykge1xuICAgICAgICByZXR1cm4gci53KGEoZSksIHQsIG4sIG8gJiYgby5yZXZlcnNlKCkpO1xuICAgICAgfSxcbiAgICAgIGlzR2VuZXJhdG9yRnVuY3Rpb246IG4sXG4gICAgICBtYXJrOiByLm0sXG4gICAgICBhd3JhcDogZnVuY3Rpb24gYXdyYXAociwgZSkge1xuICAgICAgICByZXR1cm4gbmV3IE92ZXJsb2FkWWllbGQociwgZSk7XG4gICAgICB9LFxuICAgICAgQXN5bmNJdGVyYXRvcjogcmVnZW5lcmF0b3JBc3luY0l0ZXJhdG9yLFxuICAgICAgYXN5bmM6IGZ1bmN0aW9uIGFzeW5jKHIsIGUsIHQsIG8sIHUpIHtcbiAgICAgICAgcmV0dXJuIChuKGUpID8gcmVnZW5lcmF0b3JBc3luY0dlbiA6IHJlZ2VuZXJhdG9yQXN5bmMpKGEociksIGUsIHQsIG8sIHUpO1xuICAgICAgfSxcbiAgICAgIGtleXM6IHJlZ2VuZXJhdG9yS2V5cyxcbiAgICAgIHZhbHVlczogcmVnZW5lcmF0b3JWYWx1ZXNcbiAgICB9O1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAobiwgdCwgZSwgciwgbywgYSwgYykge1xuICB0cnkge1xuICAgIHZhciBpID0gblthXShjKSxcbiAgICAgIHUgPSBpLnZhbHVlO1xuICB9IGNhdGNoIChuKSB7XG4gICAgcmV0dXJuIHZvaWQgZShuKTtcbiAgfVxuICBpLmRvbmUgPyB0KHUpIDogUHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4ociwgbyk7XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHQgPSB0aGlzLFxuICAgICAgZSA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHIsIG8pIHtcbiAgICAgIHZhciBhID0gbi5hcHBseSh0LCBlKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCBuKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhuKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChhLCByLCBvLCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIG4pO1xuICAgICAgfVxuICAgICAgX25leHQodm9pZCAwKTtcbiAgICB9KTtcbiAgfTtcbn1cbmV4cG9ydCB7IF9hc3luY1RvR2VuZXJhdG9yIGFzIGRlZmF1bHQgfTsiLCJ2YXIgbj1mdW5jdGlvbigpe307ZnVuY3Rpb24gdCh0LGUpe3ZhciByLHUsaSxhPShlPWV8fHt9KS5pbml0aWFsfHxbXSxsPWUubWF4fHxJbmZpbml0eSxvPWUuaW50ZXJ2YWx8fDFlNCxjPWUub25FbXB0eXx8bixmPWUub25QYXVzZXx8bjtmdW5jdGlvbiBzKG4pe2NsZWFySW50ZXJ2YWwocik7dmFyIGU9YS5zcGxpY2UoMCxsKTtyZXR1cm4gZS5sZW5ndGgmJnQoZSxhKSxhLmxlbmd0aD9uP3MoKTpoKCk6KGk9ITEsYyhhKSl9ZnVuY3Rpb24gaCgpe2k9ITAscj1zZXRJbnRlcnZhbChzLG8pfXJldHVybiBhLmxlbmd0aCYmaCgpLHtmbHVzaDpmdW5jdGlvbihuKXtzKG4pfSxyZXN1bWU6cyxwdXNoOmZ1bmN0aW9uKG4pe3JldHVybih1PWEucHVzaChuKSk+PWwmJiFlLnRocm90dGxlJiZzKCksaXx8aCgpLHV9LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZW5ndGh9LHBhdXNlOmZ1bmN0aW9uKG4pe24mJnMoKSxjbGVhckludGVydmFsKHIpLGk9ITEsZihhKX19fWV4cG9ydHt0IGFzIGRlZmF1bHR9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5hbHl0aWNzLXV0aWwtcXVldWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e2hhc1N1cHBvcnQgYXMgZSx3cmFwIGFzIHQsZ2V0IGFzIG8sc2V0IGFzIHIscmVtb3ZlIGFzIHN9ZnJvbVwiQGFuYWx5dGljcy9nbG9iYWwtc3RvcmFnZS11dGlsc1wiO3ZhciBhPVwic2Vzc2lvblN0b3JhZ2VcIixsPWUuYmluZChudWxsLGEpLG09dChhLFwiZ2V0SXRlbVwiLG8pLGk9dChhLFwic2V0SXRlbVwiLHIpLGc9dChhLFwicmVtb3ZlSXRlbVwiLHMpO2V4cG9ydHthIGFzIFNFU1NJT05fU1RPUkFHRSxtIGFzIGdldFNlc3Npb25JdGVtLGwgYXMgaGFzU2Vzc2lvblN0b3JhZ2UsZyBhcyByZW1vdmVTZXNzaW9uSXRlbSxpIGFzIHNldFNlc3Npb25JdGVtfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuYWx5dGljcy11dGlsLXNlc3Npb24tc3RvcmFnZS5tb2R1bGUuanMubWFwXG4iLCJpbXBvcnR7dXVpZCBhcyBlfWZyb21cImFuYWx5dGljcy11dGlsc1wiO2ltcG9ydHtnZXRTZXNzaW9uSXRlbSBhcyByLHNldFNlc3Npb25JdGVtIGFzIGl9ZnJvbVwiQGFuYWx5dGljcy9zZXNzaW9uLXN0b3JhZ2UtdXRpbHNcIjtpbXBvcnR7Z2V0Q29va2llIGFzIHQsc2V0Q29va2llIGFzIG4scmVtb3ZlQ29va2llIGFzIGF9ZnJvbVwiQGFuYWx5dGljcy9jb29raWUtdXRpbHNcIjtpbXBvcnR7Z2V0IGFzIG8sc2V0IGFzIHN9ZnJvbVwiQGFuYWx5dGljcy9nbG9iYWwtc3RvcmFnZS11dGlsc1wiO3ZhciB1PVwiX19cIixkPVwic2Vzc2lvblwiLGM9dStkLGw9XCJwYWdlXCIsZj1bXCJpZFwiLFwiY3JlYXRlZEF0XCIsXCJjcmVhdGVkXCJdO2Z1bmN0aW9uIHYoZSl7dmFyIHI9ZT9uZXcgRGF0ZShlKTpuZXcgRGF0ZTtyZXR1cm5bci50b0lTT1N0cmluZygpLHIuZ2V0VGltZSgpXX1mdW5jdGlvbiBtKCl7dmFyIHI9digpLGk9clswXSx0PXJbMV07cmV0dXJue2lkOmUoKSxjcmVhdGVkOnQsY3JlYXRlZEF0Oml9fXZhciBwPXtzZXNzaW9uOltyLGldLHBhZ2U6W28sc119O2Z1bmN0aW9uIGcoZSxyKXtmb3IodmFyIGk9cFtlXSx0PWlbMF0sbj1pWzFdLGE9bSgpLG89ITEscz17fSxjPTA7YzxmLmxlbmd0aDtjKyspe3ZhciBsPWZbY10sdj11K2UrdStkK3UrbCxnPXQodik7bz1yfHwhZywocnx8IXImJiFnKSYmbih2LGFbbF0pO3ZhciB4PWcmJiFyP2c6YVtsXSx5PVwiY3JlYXRlZFwiIT09bD94Ok51bWJlcih4KTtzW2xdPXl9cmV0dXJuIGIocyxvKX1mdW5jdGlvbiBiKGUscil7dmFyIGk9RGF0ZS5ub3coKTtyZXR1cm4gZS5lbGFwc2VkPWktZS5jcmVhdGVkLGUuZXhwaXJlcyYmKGUucmVtYWluaW5nPU1hdGgubWF4KGUuZXhwaXJlcy1pLDApLGUuaXNFeHBpcmVkPTA9PT1lLnJlbWFpbmluZyksZS5pc05ldz1yLGV9ZnVuY3Rpb24geChlLHIpe3ZvaWQgMD09PWUmJihlPTMwKTt2YXIgaT10KGMpLG49aT9KU09OLnBhcnNlKGkpOnkoZSk7cmV0dXJuIHI/bjpiKG4sIWkpfWZ1bmN0aW9uIHkoZSxyLGkpe3ZvaWQgMD09PWUmJihlPTMwKTt2YXIgdD1pP3goZSwhMCk6bSgpLGE9NjAqZSxvPXQuY3JlYXRlZDtpZihpKXt2YXIgcz12KCksdT1zWzBdLGQ9c1sxXTt0Lm1vZGlmaWVkPWQsdC5tb2RpZmllZEF0PXUsbz1kfXZhciBsPXYobysxZTMqYSksZj1sWzBdO3JldHVybiB0LmV4cGlyZXM9bFsxXSx0LmV4cGlyZXNBdD1mLHQuZHVyYXRpb249MWUzKmEsciYmKHQ9T2JqZWN0LmFzc2lnbih0LHIpKSxuKGMsSlNPTi5zdHJpbmdpZnkodCksYSksYih0LCFpKX12YXIgdz1mdW5jdGlvbihlLHIpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0zMCkseShlfHwxLHIsITApfSxBPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYyl9LE49Zy5iaW5kKG51bGwsZCksTz1nLmJpbmQobnVsbCxkLCEwKSxTPWcuYmluZChudWxsLGwpLEQ9Zy5iaW5kKG51bGwsbCwhMCk7ZXhwb3J0e3cgYXMgZXh0ZW5kU2Vzc2lvbixTIGFzIGdldFBhZ2VTZXNzaW9uLHggYXMgZ2V0U2Vzc2lvbixOIGFzIGdldFRhYlNlc3Npb24sQSBhcyByZW1vdmVTZXNzaW9uLG0gYXMgc2Vzc2lvbkRhdGEsRCBhcyBzZXRQYWdlU2Vzc2lvbix5IGFzIHNldFNlc3Npb24sTyBhcyBzZXRUYWJTZXNzaW9ufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuYWx5dGljcy11dGlsLXNlc3Npb24ubW9kdWxlLmpzLm1hcFxuIiwidmFyIHQ9XCJmdW5jdGlvblwiLG49XCJzdHJpbmdcIixlPVwidW5kZWZpbmVkXCIscj1cImJvb2xlYW5cIixvPVwib2JqZWN0XCIsdT1cImFycmF5XCIsaT1cIm51bWJlclwiLGY9ZnVuY3Rpb24oKXt9LGM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdztmdW5jdGlvbiBwKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9ZnVuY3Rpb24gYSh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdH1mdW5jdGlvbiB5KHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0JiYhaXNOYU4odCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiBkKHQpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdH1mdW5jdGlvbiBiKHQpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBnKHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMTtmb3IodmFyIG49dDtudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pOyluPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bn1mdW5jdGlvbiBzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIG0odCl7aWYoIXAodCkpcmV0dXJuITE7dmFyIG49L3soXFxyfFxcbnxcXHMpKn0vZ20sZT1mLnRvU3RyaW5nKCk7cmV0dXJuIGU9PT0odC50b1N0cmluZygpLm1hdGNoKG4pfHxbXCJcIl0pWzBdLnJlcGxhY2UobixlKX1mdW5jdGlvbiBPKHQpe3JldHVybiBOb2RlTGlzdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KX1mdW5jdGlvbiBqKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRWxlbWVudHx8dCBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudH1mdW5jdGlvbiB2KHQpe3JldHVybiBqKHQpJiZcIkZPUk1cIj09PXQubm9kZU5hbWV9ZnVuY3Rpb24gUyh0LG4pe2lmKCF0fHxcImhpZGRlblwiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS52aXNpYmlsaXR5KXJldHVybiEwO2Zvcig7dDspe2lmKG51bGwhPW4mJnQ9PT1uKXJldHVybiExO2lmKFwibm9uZVwiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5KXJldHVybiEwO3Q9dC5wYXJlbnRFbGVtZW50fXJldHVybiExfWV4cG9ydHt1IGFzIEFSUkFZLHIgYXMgQk9PTEVBTix0IGFzIEZVTkNUSU9OLGkgYXMgTlVNQkVSLG8gYXMgT0JKRUNULG4gYXMgU1RSSU5HLGUgYXMgVU5ERUZJTkVELGIgYXMgaXNBcnJheSxkIGFzIGlzQm9vbGVhbixjIGFzIGlzQnJvd3NlcixqIGFzIGlzRWxlbWVudCx2IGFzIGlzRm9ybSxwIGFzIGlzRnVuY3Rpb24sUyBhcyBpc0hpZGRlbixtIGFzIGlzTm9PcCxPIGFzIGlzTm9kZUxpc3QseSBhcyBpc051bWJlcixnIGFzIGlzT2JqZWN0LHMgYXMgaXNSZWdleCxhIGFzIGlzU3RyaW5nLGwgYXMgaXNVbmRlZmluZWQsZiBhcyBub09wfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuYWx5dGljcy11dGlsLXR5cGVzLm1vZHVsZS5qcy5tYXBcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzTWVyZ2VhYmxlT2JqZWN0ID0gZnVuY3Rpb24gaXNNZXJnZWFibGVPYmplY3QodmFsdWUpIHtcblx0cmV0dXJuIGlzTm9uTnVsbE9iamVjdCh2YWx1ZSlcblx0XHQmJiAhaXNTcGVjaWFsKHZhbHVlKVxufTtcblxuZnVuY3Rpb24gaXNOb25OdWxsT2JqZWN0KHZhbHVlKSB7XG5cdHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbn1cblxuZnVuY3Rpb24gaXNTcGVjaWFsKHZhbHVlKSB7XG5cdHZhciBzdHJpbmdWYWx1ZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG5cblx0cmV0dXJuIHN0cmluZ1ZhbHVlID09PSAnW29iamVjdCBSZWdFeHBdJ1xuXHRcdHx8IHN0cmluZ1ZhbHVlID09PSAnW29iamVjdCBEYXRlXSdcblx0XHR8fCBpc1JlYWN0RWxlbWVudCh2YWx1ZSlcbn1cblxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2I1YWM5NjNmYjc5MWQxMjk4ZTdmMzk2MjM2MzgzYmM5NTVmOTE2YzEvc3JjL2lzb21vcnBoaWMvY2xhc3NpYy9lbGVtZW50L1JlYWN0RWxlbWVudC5qcyNMMjEtTDI1XG52YXIgY2FuVXNlU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGNhblVzZVN5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcblxuZnVuY3Rpb24gaXNSZWFjdEVsZW1lbnQodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbn1cblxuZnVuY3Rpb24gZW1wdHlUYXJnZXQodmFsKSB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHZhbCkgPyBbXSA6IHt9XG59XG5cbmZ1bmN0aW9uIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHZhbHVlLCBvcHRpb25zKSB7XG5cdHJldHVybiAob3B0aW9ucy5jbG9uZSAhPT0gZmFsc2UgJiYgb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkpXG5cdFx0PyBkZWVwbWVyZ2UoZW1wdHlUYXJnZXQodmFsdWUpLCB2YWx1ZSwgb3B0aW9ucylcblx0XHQ6IHZhbHVlXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRBcnJheU1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdHJldHVybiB0YXJnZXQuY29uY2F0KHNvdXJjZSkubWFwKGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRyZXR1cm4gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQoZWxlbWVudCwgb3B0aW9ucylcblx0fSlcbn1cblxuZnVuY3Rpb24gZ2V0TWVyZ2VGdW5jdGlvbihrZXksIG9wdGlvbnMpIHtcblx0aWYgKCFvcHRpb25zLmN1c3RvbU1lcmdlKSB7XG5cdFx0cmV0dXJuIGRlZXBtZXJnZVxuXHR9XG5cdHZhciBjdXN0b21NZXJnZSA9IG9wdGlvbnMuY3VzdG9tTWVyZ2Uoa2V5KTtcblx0cmV0dXJuIHR5cGVvZiBjdXN0b21NZXJnZSA9PT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbU1lcmdlIDogZGVlcG1lcmdlXG59XG5cbmZ1bmN0aW9uIGdldEVudW1lcmFibGVPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSB7XG5cdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzXG5cdFx0PyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkuZmlsdGVyKGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRhcmdldCwgc3ltYm9sKVxuXHRcdH0pXG5cdFx0OiBbXVxufVxuXG5mdW5jdGlvbiBnZXRLZXlzKHRhcmdldCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXModGFyZ2V0KS5jb25jYXQoZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKVxufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUlzT25PYmplY3Qob2JqZWN0LCBwcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdHJldHVybiBwcm9wZXJ0eSBpbiBvYmplY3Rcblx0fSBjYXRjaChfKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cbn1cblxuLy8gUHJvdGVjdHMgZnJvbSBwcm90b3R5cGUgcG9pc29uaW5nIGFuZCB1bmV4cGVjdGVkIG1lcmdpbmcgdXAgdGhlIHByb3RvdHlwZSBjaGFpbi5cbmZ1bmN0aW9uIHByb3BlcnR5SXNVbnNhZmUodGFyZ2V0LCBrZXkpIHtcblx0cmV0dXJuIHByb3BlcnR5SXNPbk9iamVjdCh0YXJnZXQsIGtleSkgLy8gUHJvcGVydGllcyBhcmUgc2FmZSB0byBtZXJnZSBpZiB0aGV5IGRvbid0IGV4aXN0IGluIHRoZSB0YXJnZXQgeWV0LFxuXHRcdCYmICEoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpIC8vIHVuc2FmZSBpZiB0aGV5IGV4aXN0IHVwIHRoZSBwcm90b3R5cGUgY2hhaW4sXG5cdFx0XHQmJiBPYmplY3QucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0YXJnZXQsIGtleSkpIC8vIGFuZCBhbHNvIHVuc2FmZSBpZiB0aGV5J3JlIG5vbmVudW1lcmFibGUuXG59XG5cbmZ1bmN0aW9uIG1lcmdlT2JqZWN0KHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IHt9O1xuXHRpZiAob3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCh0YXJnZXQpKSB7XG5cdFx0Z2V0S2V5cyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQodGFyZ2V0W2tleV0sIG9wdGlvbnMpO1xuXHRcdH0pO1xuXHR9XG5cdGdldEtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdGlmIChwcm9wZXJ0eUlzVW5zYWZlKHRhcmdldCwga2V5KSkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHByb3BlcnR5SXNPbk9iamVjdCh0YXJnZXQsIGtleSkgJiYgb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdChzb3VyY2Vba2V5XSkpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBnZXRNZXJnZUZ1bmN0aW9uKGtleSwgb3B0aW9ucykodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldLCBvcHRpb25zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHNvdXJjZVtrZXldLCBvcHRpb25zKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZGVzdGluYXRpb25cbn1cblxuZnVuY3Rpb24gZGVlcG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRvcHRpb25zLmFycmF5TWVyZ2UgPSBvcHRpb25zLmFycmF5TWVyZ2UgfHwgZGVmYXVsdEFycmF5TWVyZ2U7XG5cdG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QgPSBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0IHx8IGlzTWVyZ2VhYmxlT2JqZWN0O1xuXHQvLyBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCBpcyBhZGRlZCB0byBgb3B0aW9uc2Agc28gdGhhdCBjdXN0b20gYXJyYXlNZXJnZSgpXG5cdC8vIGltcGxlbWVudGF0aW9ucyBjYW4gdXNlIGl0LiBUaGUgY2FsbGVyIG1heSBub3QgcmVwbGFjZSBpdC5cblx0b3B0aW9ucy5jbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkO1xuXG5cdHZhciBzb3VyY2VJc0FycmF5ID0gQXJyYXkuaXNBcnJheShzb3VyY2UpO1xuXHR2YXIgdGFyZ2V0SXNBcnJheSA9IEFycmF5LmlzQXJyYXkodGFyZ2V0KTtcblx0dmFyIHNvdXJjZUFuZFRhcmdldFR5cGVzTWF0Y2ggPSBzb3VyY2VJc0FycmF5ID09PSB0YXJnZXRJc0FycmF5O1xuXG5cdGlmICghc291cmNlQW5kVGFyZ2V0VHlwZXNNYXRjaCkge1xuXHRcdHJldHVybiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChzb3VyY2UsIG9wdGlvbnMpXG5cdH0gZWxzZSBpZiAoc291cmNlSXNBcnJheSkge1xuXHRcdHJldHVybiBvcHRpb25zLmFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpXG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG1lcmdlT2JqZWN0KHRhcmdldCwgc291cmNlLCBvcHRpb25zKVxuXHR9XG59XG5cbmRlZXBtZXJnZS5hbGwgPSBmdW5jdGlvbiBkZWVwbWVyZ2VBbGwoYXJyYXksIG9wdGlvbnMpIHtcblx0aWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Jylcblx0fVxuXG5cdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgbmV4dCkge1xuXHRcdHJldHVybiBkZWVwbWVyZ2UocHJldiwgbmV4dCwgb3B0aW9ucylcblx0fSwge30pXG59O1xuXG52YXIgZGVlcG1lcmdlXzEgPSBkZWVwbWVyZ2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVlcG1lcmdlXzE7XG4iLCIvKipcbiAqIEBsaWNlbnNlIE1JVCA8aHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+XG4gKiBAY29weXJpZ2h0IE1pY2hhZWwgSGFydCAyMDI0XG4gKi9cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbmNvbnN0IEhPU1RfU0VSVklDRVMgPSB7XG4gIGFwcHN0cmVhbTI6ICdhcHBzdHJlYW0nLFxuICBjbG91ZGhzbXYyOiAnY2xvdWRoc20nLFxuICBlbWFpbDogJ3NlcycsXG4gIG1hcmtldHBsYWNlOiAnYXdzLW1hcmtldHBsYWNlJyxcbiAgbW9iaWxlOiAnQVdTTW9iaWxlSHViU2VydmljZScsXG4gIHBpbnBvaW50OiAnbW9iaWxldGFyZ2V0aW5nJyxcbiAgcXVldWU6ICdzcXMnLFxuICAnZ2l0LWNvZGVjb21taXQnOiAnY29kZWNvbW1pdCcsXG4gICdtdHVyay1yZXF1ZXN0ZXItc2FuZGJveCc6ICdtdHVyay1yZXF1ZXN0ZXInLFxuICAncGVyc29uYWxpemUtcnVudGltZSc6ICdwZXJzb25hbGl6ZScsXG59O1xuY29uc3QgVU5TSUdOQUJMRV9IRUFERVJTID0gbmV3IFNldChbXG4gICdhdXRob3JpemF0aW9uJyxcbiAgJ2NvbnRlbnQtdHlwZScsXG4gICdjb250ZW50LWxlbmd0aCcsXG4gICd1c2VyLWFnZW50JyxcbiAgJ3ByZXNpZ25lZC1leHBpcmVzJyxcbiAgJ2V4cGVjdCcsXG4gICd4LWFtem4tdHJhY2UtaWQnLFxuICAncmFuZ2UnLFxuICAnY29ubmVjdGlvbicsXG5dKTtcbmNsYXNzIEF3c0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yKHsgYWNjZXNzS2V5SWQsIHNlY3JldEFjY2Vzc0tleSwgc2Vzc2lvblRva2VuLCBzZXJ2aWNlLCByZWdpb24sIGNhY2hlLCByZXRyaWVzLCBpbml0UmV0cnlNcyB9KSB7XG4gICAgaWYgKGFjY2Vzc0tleUlkID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FjY2Vzc0tleUlkIGlzIGEgcmVxdWlyZWQgb3B0aW9uJylcbiAgICBpZiAoc2VjcmV0QWNjZXNzS2V5ID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEFjY2Vzc0tleSBpcyBhIHJlcXVpcmVkIG9wdGlvbicpXG4gICAgdGhpcy5hY2Nlc3NLZXlJZCA9IGFjY2Vzc0tleUlkO1xuICAgIHRoaXMuc2VjcmV0QWNjZXNzS2V5ID0gc2VjcmV0QWNjZXNzS2V5O1xuICAgIHRoaXMuc2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuO1xuICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgdGhpcy5yZWdpb24gPSByZWdpb247XG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlIHx8IG5ldyBNYXAoKTtcbiAgICB0aGlzLnJldHJpZXMgPSByZXRyaWVzICE9IG51bGwgPyByZXRyaWVzIDogMTA7XG4gICAgdGhpcy5pbml0UmV0cnlNcyA9IGluaXRSZXRyeU1zIHx8IDUwO1xuICB9XG4gIGFzeW5jIHNpZ24oaW5wdXQsIGluaXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzLCBib2R5IH0gPSBpbnB1dDtcbiAgICAgIGluaXQgPSBPYmplY3QuYXNzaWduKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSwgaW5pdCk7XG4gICAgICBpZiAoaW5pdC5ib2R5ID09IG51bGwgJiYgaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICAgIGluaXQuYm9keSA9IGJvZHkgIT0gbnVsbCAmJiBoZWFkZXJzLmhhcygnWC1BbXotQ29udGVudC1TaGEyNTYnKSA/IGJvZHkgOiBhd2FpdCBpbnB1dC5jbG9uZSgpLmFycmF5QnVmZmVyKCk7XG4gICAgICB9XG4gICAgICBpbnB1dCA9IHVybDtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmVyID0gbmV3IEF3c1Y0U2lnbmVyKE9iamVjdC5hc3NpZ24oeyB1cmw6IGlucHV0LnRvU3RyaW5nKCkgfSwgaW5pdCwgdGhpcywgaW5pdCAmJiBpbml0LmF3cykpO1xuICAgIGNvbnN0IHNpZ25lZCA9IE9iamVjdC5hc3NpZ24oe30sIGluaXQsIGF3YWl0IHNpZ25lci5zaWduKCkpO1xuICAgIGRlbGV0ZSBzaWduZWQuYXdzO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFJlcXVlc3Qoc2lnbmVkLnVybC50b1N0cmluZygpLCBzaWduZWQpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHNpZ25lZC51cmwudG9TdHJpbmcoKSwgT2JqZWN0LmFzc2lnbih7IGR1cGxleDogJ2hhbGYnIH0sIHNpZ25lZCkpXG4gICAgICB9XG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9XG4gIGFzeW5jIGZldGNoKGlucHV0LCBpbml0KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gdGhpcy5yZXRyaWVzOyBpKyspIHtcbiAgICAgIGNvbnN0IGZldGNoZWQgPSBmZXRjaChhd2FpdCB0aGlzLnNpZ24oaW5wdXQsIGluaXQpKTtcbiAgICAgIGlmIChpID09PSB0aGlzLnJldHJpZXMpIHtcbiAgICAgICAgcmV0dXJuIGZldGNoZWRcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoZWQ7XG4gICAgICBpZiAocmVzLnN0YXR1cyA8IDUwMCAmJiByZXMuc3RhdHVzICE9PSA0MjkpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIE1hdGgucmFuZG9tKCkgKiB0aGlzLmluaXRSZXRyeU1zICogTWF0aC5wb3coMiwgaSkpKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBbiB1bmtub3duIGVycm9yIG9jY3VycmVkLCBlbnN1cmUgcmV0cmllcyBpcyBub3QgbmVnYXRpdmUnKVxuICB9XG59XG5jbGFzcyBBd3NWNFNpZ25lciB7XG4gIGNvbnN0cnVjdG9yKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMsIGJvZHksIGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIHNlc3Npb25Ub2tlbiwgc2VydmljZSwgcmVnaW9uLCBjYWNoZSwgZGF0ZXRpbWUsIHNpZ25RdWVyeSwgYXBwZW5kU2Vzc2lvblRva2VuLCBhbGxIZWFkZXJzLCBzaW5nbGVFbmNvZGUgfSkge1xuICAgIGlmICh1cmwgPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcigndXJsIGlzIGEgcmVxdWlyZWQgb3B0aW9uJylcbiAgICBpZiAoYWNjZXNzS2V5SWQgPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcignYWNjZXNzS2V5SWQgaXMgYSByZXF1aXJlZCBvcHRpb24nKVxuICAgIGlmIChzZWNyZXRBY2Nlc3NLZXkgPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcignc2VjcmV0QWNjZXNzS2V5IGlzIGEgcmVxdWlyZWQgb3B0aW9uJylcbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZCB8fCAoYm9keSA/ICdQT1NUJyA6ICdHRVQnKTtcbiAgICB0aGlzLnVybCA9IG5ldyBVUkwodXJsKTtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhoZWFkZXJzIHx8IHt9KTtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuYWNjZXNzS2V5SWQgPSBhY2Nlc3NLZXlJZDtcbiAgICB0aGlzLnNlY3JldEFjY2Vzc0tleSA9IHNlY3JldEFjY2Vzc0tleTtcbiAgICB0aGlzLnNlc3Npb25Ub2tlbiA9IHNlc3Npb25Ub2tlbjtcbiAgICBsZXQgZ3Vlc3NlZFNlcnZpY2UsIGd1ZXNzZWRSZWdpb247XG4gICAgaWYgKCFzZXJ2aWNlIHx8ICFyZWdpb24pIHtcbltndWVzc2VkU2VydmljZSwgZ3Vlc3NlZFJlZ2lvbl0gPSBndWVzc1NlcnZpY2VSZWdpb24odGhpcy51cmwsIHRoaXMuaGVhZGVycyk7XG4gICAgfVxuICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2UgfHwgZ3Vlc3NlZFNlcnZpY2UgfHwgJyc7XG4gICAgdGhpcy5yZWdpb24gPSByZWdpb24gfHwgZ3Vlc3NlZFJlZ2lvbiB8fCAndXMtZWFzdC0xJztcbiAgICB0aGlzLmNhY2hlID0gY2FjaGUgfHwgbmV3IE1hcCgpO1xuICAgIHRoaXMuZGF0ZXRpbWUgPSBkYXRldGltZSB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzotXXxcXC5cXGR7M30vZywgJycpO1xuICAgIHRoaXMuc2lnblF1ZXJ5ID0gc2lnblF1ZXJ5O1xuICAgIHRoaXMuYXBwZW5kU2Vzc2lvblRva2VuID0gYXBwZW5kU2Vzc2lvblRva2VuIHx8IHRoaXMuc2VydmljZSA9PT0gJ2lvdGRldmljZWdhdGV3YXknO1xuICAgIHRoaXMuaGVhZGVycy5kZWxldGUoJ0hvc3QnKTtcbiAgICBpZiAodGhpcy5zZXJ2aWNlID09PSAnczMnICYmICF0aGlzLnNpZ25RdWVyeSAmJiAhdGhpcy5oZWFkZXJzLmhhcygnWC1BbXotQ29udGVudC1TaGEyNTYnKSkge1xuICAgICAgdGhpcy5oZWFkZXJzLnNldCgnWC1BbXotQ29udGVudC1TaGEyNTYnLCAnVU5TSUdORUQtUEFZTE9BRCcpO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnNpZ25RdWVyeSA/IHRoaXMudXJsLnNlYXJjaFBhcmFtcyA6IHRoaXMuaGVhZGVycztcbiAgICBwYXJhbXMuc2V0KCdYLUFtei1EYXRlJywgdGhpcy5kYXRldGltZSk7XG4gICAgaWYgKHRoaXMuc2Vzc2lvblRva2VuICYmICF0aGlzLmFwcGVuZFNlc3Npb25Ub2tlbikge1xuICAgICAgcGFyYW1zLnNldCgnWC1BbXotU2VjdXJpdHktVG9rZW4nLCB0aGlzLnNlc3Npb25Ub2tlbik7XG4gICAgfVxuICAgIHRoaXMuc2lnbmFibGVIZWFkZXJzID0gWydob3N0JywgLi4udGhpcy5oZWFkZXJzLmtleXMoKV1cbiAgICAgIC5maWx0ZXIoaGVhZGVyID0+IGFsbEhlYWRlcnMgfHwgIVVOU0lHTkFCTEVfSEVBREVSUy5oYXMoaGVhZGVyKSlcbiAgICAgIC5zb3J0KCk7XG4gICAgdGhpcy5zaWduZWRIZWFkZXJzID0gdGhpcy5zaWduYWJsZUhlYWRlcnMuam9pbignOycpO1xuICAgIHRoaXMuY2Fub25pY2FsSGVhZGVycyA9IHRoaXMuc2lnbmFibGVIZWFkZXJzXG4gICAgICAubWFwKGhlYWRlciA9PiBoZWFkZXIgKyAnOicgKyAoaGVhZGVyID09PSAnaG9zdCcgPyB0aGlzLnVybC5ob3N0IDogKHRoaXMuaGVhZGVycy5nZXQoaGVhZGVyKSB8fCAnJykucmVwbGFjZSgvXFxzKy9nLCAnICcpKSlcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB0aGlzLmNyZWRlbnRpYWxTdHJpbmcgPSBbdGhpcy5kYXRldGltZS5zbGljZSgwLCA4KSwgdGhpcy5yZWdpb24sIHRoaXMuc2VydmljZSwgJ2F3czRfcmVxdWVzdCddLmpvaW4oJy8nKTtcbiAgICBpZiAodGhpcy5zaWduUXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlcnZpY2UgPT09ICdzMycgJiYgIXBhcmFtcy5oYXMoJ1gtQW16LUV4cGlyZXMnKSkge1xuICAgICAgICBwYXJhbXMuc2V0KCdYLUFtei1FeHBpcmVzJywgJzg2NDAwJyk7XG4gICAgICB9XG4gICAgICBwYXJhbXMuc2V0KCdYLUFtei1BbGdvcml0aG0nLCAnQVdTNC1ITUFDLVNIQTI1NicpO1xuICAgICAgcGFyYW1zLnNldCgnWC1BbXotQ3JlZGVudGlhbCcsIHRoaXMuYWNjZXNzS2V5SWQgKyAnLycgKyB0aGlzLmNyZWRlbnRpYWxTdHJpbmcpO1xuICAgICAgcGFyYW1zLnNldCgnWC1BbXotU2lnbmVkSGVhZGVycycsIHRoaXMuc2lnbmVkSGVhZGVycyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlcnZpY2UgPT09ICdzMycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW5jb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodGhpcy51cmwucGF0aG5hbWUucmVwbGFjZSgvXFwrL2csICcgJykpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmVuY29kZWRQYXRoID0gdGhpcy51cmwucGF0aG5hbWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5jb2RlZFBhdGggPSB0aGlzLnVybC5wYXRobmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJyk7XG4gICAgfVxuICAgIGlmICghc2luZ2xlRW5jb2RlKSB7XG4gICAgICB0aGlzLmVuY29kZWRQYXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZW5jb2RlZFBhdGgpLnJlcGxhY2UoLyUyRi9nLCAnLycpO1xuICAgIH1cbiAgICB0aGlzLmVuY29kZWRQYXRoID0gZW5jb2RlUmZjMzk4Nih0aGlzLmVuY29kZWRQYXRoKTtcbiAgICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLmVuY29kZWRTZWFyY2ggPSBbLi4udGhpcy51cmwuc2VhcmNoUGFyYW1zXVxuICAgICAgLmZpbHRlcigoW2tdKSA9PiB7XG4gICAgICAgIGlmICghaykgcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmICh0aGlzLnNlcnZpY2UgPT09ICdzMycpIHtcbiAgICAgICAgICBpZiAoc2VlbktleXMuaGFzKGspKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICBzZWVuS2V5cy5hZGQoayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgICAubWFwKHBhaXIgPT4gcGFpci5tYXAocCA9PiBlbmNvZGVSZmMzOTg2KGVuY29kZVVSSUNvbXBvbmVudChwKSkpKVxuICAgICAgLnNvcnQoKFtrMSwgdjFdLCBbazIsIHYyXSkgPT4gazEgPCBrMiA/IC0xIDogazEgPiBrMiA/IDEgOiB2MSA8IHYyID8gLTEgOiB2MSA+IHYyID8gMSA6IDApXG4gICAgICAubWFwKHBhaXIgPT4gcGFpci5qb2luKCc9JykpXG4gICAgICAuam9pbignJicpO1xuICB9XG4gIGFzeW5jIHNpZ24oKSB7XG4gICAgaWYgKHRoaXMuc2lnblF1ZXJ5KSB7XG4gICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KCdYLUFtei1TaWduYXR1cmUnLCBhd2FpdCB0aGlzLnNpZ25hdHVyZSgpKTtcbiAgICAgIGlmICh0aGlzLnNlc3Npb25Ub2tlbiAmJiB0aGlzLmFwcGVuZFNlc3Npb25Ub2tlbikge1xuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KCdYLUFtei1TZWN1cml0eS1Ub2tlbicsIHRoaXMuc2Vzc2lvblRva2VuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGF3YWl0IHRoaXMuYXV0aEhlYWRlcigpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgYm9keTogdGhpcy5ib2R5LFxuICAgIH1cbiAgfVxuICBhc3luYyBhdXRoSGVhZGVyKCkge1xuICAgIHJldHVybiBbXG4gICAgICAnQVdTNC1ITUFDLVNIQTI1NiBDcmVkZW50aWFsPScgKyB0aGlzLmFjY2Vzc0tleUlkICsgJy8nICsgdGhpcy5jcmVkZW50aWFsU3RyaW5nLFxuICAgICAgJ1NpZ25lZEhlYWRlcnM9JyArIHRoaXMuc2lnbmVkSGVhZGVycyxcbiAgICAgICdTaWduYXR1cmU9JyArIChhd2FpdCB0aGlzLnNpZ25hdHVyZSgpKSxcbiAgICBdLmpvaW4oJywgJylcbiAgfVxuICBhc3luYyBzaWduYXR1cmUoKSB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZXRpbWUuc2xpY2UoMCwgOCk7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBbdGhpcy5zZWNyZXRBY2Nlc3NLZXksIGRhdGUsIHRoaXMucmVnaW9uLCB0aGlzLnNlcnZpY2VdLmpvaW4oKTtcbiAgICBsZXQga0NyZWRlbnRpYWxzID0gdGhpcy5jYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmICgha0NyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBrRGF0ZSA9IGF3YWl0IGhtYWMoJ0FXUzQnICsgdGhpcy5zZWNyZXRBY2Nlc3NLZXksIGRhdGUpO1xuICAgICAgY29uc3Qga1JlZ2lvbiA9IGF3YWl0IGhtYWMoa0RhdGUsIHRoaXMucmVnaW9uKTtcbiAgICAgIGNvbnN0IGtTZXJ2aWNlID0gYXdhaXQgaG1hYyhrUmVnaW9uLCB0aGlzLnNlcnZpY2UpO1xuICAgICAga0NyZWRlbnRpYWxzID0gYXdhaXQgaG1hYyhrU2VydmljZSwgJ2F3czRfcmVxdWVzdCcpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoY2FjaGVLZXksIGtDcmVkZW50aWFscyk7XG4gICAgfVxuICAgIHJldHVybiBidWYyaGV4KGF3YWl0IGhtYWMoa0NyZWRlbnRpYWxzLCBhd2FpdCB0aGlzLnN0cmluZ1RvU2lnbigpKSlcbiAgfVxuICBhc3luYyBzdHJpbmdUb1NpZ24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdBV1M0LUhNQUMtU0hBMjU2JyxcbiAgICAgIHRoaXMuZGF0ZXRpbWUsXG4gICAgICB0aGlzLmNyZWRlbnRpYWxTdHJpbmcsXG4gICAgICBidWYyaGV4KGF3YWl0IGhhc2goYXdhaXQgdGhpcy5jYW5vbmljYWxTdHJpbmcoKSkpLFxuICAgIF0uam9pbignXFxuJylcbiAgfVxuICBhc3luYyBjYW5vbmljYWxTdHJpbmcoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICB0aGlzLmVuY29kZWRQYXRoLFxuICAgICAgdGhpcy5lbmNvZGVkU2VhcmNoLFxuICAgICAgdGhpcy5jYW5vbmljYWxIZWFkZXJzICsgJ1xcbicsXG4gICAgICB0aGlzLnNpZ25lZEhlYWRlcnMsXG4gICAgICBhd2FpdCB0aGlzLmhleEJvZHlIYXNoKCksXG4gICAgXS5qb2luKCdcXG4nKVxuICB9XG4gIGFzeW5jIGhleEJvZHlIYXNoKCkge1xuICAgIGxldCBoYXNoSGVhZGVyID0gdGhpcy5oZWFkZXJzLmdldCgnWC1BbXotQ29udGVudC1TaGEyNTYnKSB8fCAodGhpcy5zZXJ2aWNlID09PSAnczMnICYmIHRoaXMuc2lnblF1ZXJ5ID8gJ1VOU0lHTkVELVBBWUxPQUQnIDogbnVsbCk7XG4gICAgaWYgKGhhc2hIZWFkZXIgPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuYm9keSAmJiB0eXBlb2YgdGhpcy5ib2R5ICE9PSAnc3RyaW5nJyAmJiAhKCdieXRlTGVuZ3RoJyBpbiB0aGlzLmJvZHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm9keSBtdXN0IGJlIGEgc3RyaW5nLCBBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcsIHVubGVzcyB5b3UgaW5jbHVkZSB0aGUgWC1BbXotQ29udGVudC1TaGEyNTYgaGVhZGVyJylcbiAgICAgIH1cbiAgICAgIGhhc2hIZWFkZXIgPSBidWYyaGV4KGF3YWl0IGhhc2godGhpcy5ib2R5IHx8ICcnKSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNoSGVhZGVyXG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhtYWMoa2V5LCBzdHJpbmcpIHtcbiAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgJ3JhdycsXG4gICAgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBlbmNvZGVyLmVuY29kZShrZXkpIDoga2V5LFxuICAgIHsgbmFtZTogJ0hNQUMnLCBoYXNoOiB7IG5hbWU6ICdTSEEtMjU2JyB9IH0sXG4gICAgZmFsc2UsXG4gICAgWydzaWduJ10sXG4gICk7XG4gIHJldHVybiBjcnlwdG8uc3VidGxlLnNpZ24oJ0hNQUMnLCBjcnlwdG9LZXksIGVuY29kZXIuZW5jb2RlKHN0cmluZykpXG59XG5hc3luYyBmdW5jdGlvbiBoYXNoKGNvbnRlbnQpIHtcbiAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8gZW5jb2Rlci5lbmNvZGUoY29udGVudCkgOiBjb250ZW50KVxufVxuY29uc3QgSEVYX0NIQVJTID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJ107XG5mdW5jdGlvbiBidWYyaGV4KGFycmF5QnVmZmVyKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbiAgbGV0IG91dCA9ICcnO1xuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBidWZmZXIubGVuZ3RoOyBpZHgrKykge1xuICAgIGNvbnN0IG4gPSBidWZmZXJbaWR4XTtcbiAgICBvdXQgKz0gSEVYX0NIQVJTWyhuID4+PiA0KSAmIDB4Rl07XG4gICAgb3V0ICs9IEhFWF9DSEFSU1tuICYgMHhGXTtcbiAgfVxuICByZXR1cm4gb3V0XG59XG5mdW5jdGlvbiBlbmNvZGVSZmMzOTg2KHVybEVuY29kZWRTdHIpIHtcbiAgcmV0dXJuIHVybEVuY29kZWRTdHIucmVwbGFjZSgvWyEnKCkqXS9nLCBjID0+ICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSlcbn1cbmZ1bmN0aW9uIGd1ZXNzU2VydmljZVJlZ2lvbih1cmwsIGhlYWRlcnMpIHtcbiAgY29uc3QgeyBob3N0bmFtZSwgcGF0aG5hbWUgfSA9IHVybDtcbiAgaWYgKGhvc3RuYW1lLmVuZHNXaXRoKCcub24uYXdzJykpIHtcbiAgICBjb25zdCBtYXRjaCA9IGhvc3RuYW1lLm1hdGNoKC9eW14uXXsxLDYzfVxcLmxhbWJkYS11cmxcXC4oW14uXXsxLDYzfSlcXC5vblxcLmF3cyQvKTtcbiAgICByZXR1cm4gbWF0Y2ggIT0gbnVsbCA/IFsnbGFtYmRhJywgbWF0Y2hbMV0gfHwgJyddIDogWycnLCAnJ11cbiAgfVxuICBpZiAoaG9zdG5hbWUuZW5kc1dpdGgoJy5yMi5jbG91ZGZsYXJlc3RvcmFnZS5jb20nKSkge1xuICAgIHJldHVybiBbJ3MzJywgJ2F1dG8nXVxuICB9XG4gIGlmIChob3N0bmFtZS5lbmRzV2l0aCgnLmJhY2tibGF6ZWIyLmNvbScpKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBob3N0bmFtZS5tYXRjaCgvXig/OlteLl17MSw2M31cXC4pP3MzXFwuKFteLl17MSw2M30pXFwuYmFja2JsYXplYjJcXC5jb20kLyk7XG4gICAgcmV0dXJuIG1hdGNoICE9IG51bGwgPyBbJ3MzJywgbWF0Y2hbMV0gfHwgJyddIDogWycnLCAnJ11cbiAgfVxuICBjb25zdCBtYXRjaCA9IGhvc3RuYW1lLnJlcGxhY2UoJ2R1YWxzdGFjay4nLCAnJykubWF0Y2goLyhbXi5dezEsNjN9KVxcLig/OihbXi5dezAsNjN9KVxcLik/YW1hem9uYXdzXFwuY29tKD86XFwuY24pPyQvKTtcbiAgbGV0IHNlcnZpY2UgPSAobWF0Y2ggJiYgbWF0Y2hbMV0pIHx8ICcnO1xuICBsZXQgcmVnaW9uID0gbWF0Y2ggJiYgbWF0Y2hbMl07XG4gIGlmIChyZWdpb24gPT09ICd1cy1nb3YnKSB7XG4gICAgcmVnaW9uID0gJ3VzLWdvdi13ZXN0LTEnO1xuICB9IGVsc2UgaWYgKHJlZ2lvbiA9PT0gJ3MzJyB8fCByZWdpb24gPT09ICdzMy1hY2NlbGVyYXRlJykge1xuICAgIHJlZ2lvbiA9ICd1cy1lYXN0LTEnO1xuICAgIHNlcnZpY2UgPSAnczMnO1xuICB9IGVsc2UgaWYgKHNlcnZpY2UgPT09ICdpb3QnKSB7XG4gICAgaWYgKGhvc3RuYW1lLnN0YXJ0c1dpdGgoJ2lvdC4nKSkge1xuICAgICAgc2VydmljZSA9ICdleGVjdXRlLWFwaSc7XG4gICAgfSBlbHNlIGlmIChob3N0bmFtZS5zdGFydHNXaXRoKCdkYXRhLmpvYnMuaW90LicpKSB7XG4gICAgICBzZXJ2aWNlID0gJ2lvdC1qb2JzLWRhdGEnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXJ2aWNlID0gcGF0aG5hbWUgPT09ICcvbXF0dCcgPyAnaW90ZGV2aWNlZ2F0ZXdheScgOiAnaW90ZGF0YSc7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNlcnZpY2UgPT09ICdhdXRvc2NhbGluZycpIHtcbiAgICBjb25zdCB0YXJnZXRQcmVmaXggPSAoaGVhZGVycy5nZXQoJ1gtQW16LVRhcmdldCcpIHx8ICcnKS5zcGxpdCgnLicpWzBdO1xuICAgIGlmICh0YXJnZXRQcmVmaXggPT09ICdBbnlTY2FsZUZyb250ZW5kU2VydmljZScpIHtcbiAgICAgIHNlcnZpY2UgPSAnYXBwbGljYXRpb24tYXV0b3NjYWxpbmcnO1xuICAgIH0gZWxzZSBpZiAodGFyZ2V0UHJlZml4ID09PSAnQW55U2NhbGVTY2FsaW5nUGxhbm5lckZyb250ZW5kU2VydmljZScpIHtcbiAgICAgIHNlcnZpY2UgPSAnYXV0b3NjYWxpbmctcGxhbnMnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChyZWdpb24gPT0gbnVsbCAmJiBzZXJ2aWNlLnN0YXJ0c1dpdGgoJ3MzLScpKSB7XG4gICAgcmVnaW9uID0gc2VydmljZS5zbGljZSgzKS5yZXBsYWNlKC9eZmlwcy18XmV4dGVybmFsLTEvLCAnJyk7XG4gICAgc2VydmljZSA9ICdzMyc7XG4gIH0gZWxzZSBpZiAoc2VydmljZS5lbmRzV2l0aCgnLWZpcHMnKSkge1xuICAgIHNlcnZpY2UgPSBzZXJ2aWNlLnNsaWNlKDAsIC01KTtcbiAgfSBlbHNlIGlmIChyZWdpb24gJiYgLy1cXGQkLy50ZXN0KHNlcnZpY2UpICYmICEvLVxcZCQvLnRlc3QocmVnaW9uKSkge1xuW3NlcnZpY2UsIHJlZ2lvbl0gPSBbcmVnaW9uLCBzZXJ2aWNlXTtcbiAgfVxuICByZXR1cm4gW0hPU1RfU0VSVklDRVNbc2VydmljZV0gfHwgc2VydmljZSwgcmVnaW9uIHx8ICcnXVxufVxuXG5leHBvcnQgeyBBd3NDbGllbnQsIEF3c1Y0U2lnbmVyIH07XG4iLCJpbXBvcnR7aXNCcm93c2VyIGFzIG4saXNGdW5jdGlvbiBhcyByLGlzU3RyaW5nIGFzIHQsZW5zdXJlQXJyYXkgYXMgbyxub09wIGFzIGV9ZnJvbVwiQGFuYWx5dGljcy90eXBlLXV0aWxzXCI7dmFyIGk9XCJFdmVudFwiLHU9aStcIkxpc3RlbmVyXCI7ZnVuY3Rpb24gbChyKXtyZXR1cm4gZnVuY3Rpb24odCxvLGwsdil7dmFyIHA9bHx8ZSxjPXZ8fCExO2lmKCFuKXJldHVybiBwO3ZhciBkPWEobyksdz1hKHQsITApO2lmKCF3Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJub0VsZW1lbnRzXCIpO2lmKCFkLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJub1wiK2kpO3ZhciBoPVtdO3JldHVybiBmdW5jdGlvbiBuKHIpe3ImJihoPVtdKTtmb3IodmFyIHQ9cj9cImFkZFwiK3U6XCJyZW1vdmVcIit1LG89MDtvPHcubGVuZ3RoO28rKyl7dmFyIGU9d1tvXTtoW29dPXI/YyYmYy5vbmNlP2YocCk6cDpoW29dfHxwO2Zvcih2YXIgaT0wO2k8ZC5sZW5ndGg7aSsrKWVbdF0/ZVtcIm9uXCIrZFtpXV09cj9oW29dOm51bGw6ZVt0XShkW2ldLGhbb10sYyl9cmV0dXJuIG4uYmluZChudWxsLCFyKX0ocil9fWZ1bmN0aW9uIGEobixyKXtpZih0KG4pKXJldHVybiByP2EoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChuKSk6KGU9bikuc3BsaXQoZS5pbmRleE9mKFwiLFwiKT4tMT9cIixcIjpcIiBcIikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnRyaW0oKX0pO3ZhciBlO2lmKE5vZGVMaXN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG4pKXtmb3IodmFyIGk9W10sdT1uLmxlbmd0aD4+PjA7dS0tOylpW3VdPW5bdV07cmV0dXJuIGl9dmFyIGw9byhuKTtyZXR1cm4gcj9sLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuKT9hKG4sITApOm59KS5mbGF0KCk6bH1mdW5jdGlvbiBmKG4scil7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4mJih0PW4uYXBwbHkocnx8dGhpcyxhcmd1bWVudHMpLG49bnVsbCksdH19dmFyIHY9bChpKSxwPWwoKTtmdW5jdGlvbiBjKHQsbyl7cmV0dXJuIG4mJnIod2luZG93W3RdKT8oZT13aW5kb3dbdF0saT1vLHZvaWQgMD09PSh1PXdpbmRvdykmJih1PW51bGwpLHIoZSk/ZnVuY3Rpb24oKXtlLmFwcGx5KHUsYXJndW1lbnRzKSxpLmFwcGx5KHUsYXJndW1lbnRzKX06aSk6d2luZG93W3RdPW87dmFyIGUsaSx1fXZhciBkPWMuYmluZChudWxsLFwib25lcnJvclwiKSx3PWMuYmluZChudWxsLFwib25sb2FkXCIpO2V4cG9ydHt2IGFzIGFkZExpc3RlbmVyLGMgYXMgYWRkV2luZG93RXZlbnQsZCBhcyBvbkVycm9yLHcgYXMgb25Mb2FkLGYgYXMgb25jZSxwIGFzIHJlbW92ZUxpc3RlbmVyfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuYWx5dGljcy11dGlsLWxpc3RlbmVyLm1vZHVsZS5qcy5tYXBcbiIsInZhciBpc1NlcnZlciA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnO1xudmFyIEhJRERFTiA9ICdoaWRkZW4nO1xuLyoqXG4gKiBFeHBvc2UgVGFiIHZpc2JpbGl0eSBldmVudHMgdG8gYW5hbHR5aWNzXG4gKiBUcmlnZ2VyIGFuYWx5dGljcyBhY3Rpb25zIHdoZW4gdGFiIGlzIGhpZGRlbiBvciB2aXNpYmxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtwbHVnaW5Db25maWc9e31dIC0gY29uZmlnXG4gKiBAcmV0dXJuIHtPYmplY3R9IEFuYWx5dGljcyBwbHVnaW5cbiAqL1xuXG5mdW5jdGlvbiB0YWJFdmVudHNQbHVnaW4oKSB7XG4gIHZhciBwbHVnaW5Db25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgZXZlbnRzID0ge1xuICAgIC8qKlxuICAgICAqIGB0YWJIaWRkZW5gIC0gRmlyZXMgd2hlbiB2aXNpdG9yIGdvZXMgdG8gYW5vdGhlciBicm93c2VyIHRhYi5cbiAgICAgKi9cbiAgICB0YWJIaWRkZW46ICd0YWJIaWRkZW4nLFxuXG4gICAgLyoqXG4gICAgICogYHRhYlZpc2libGVgIC0gRmlyZXMgd2hlbiB2aXNpdG9yIGNvbWVzIGJhY2sgdG8gd2luZG93IGZyb20gYW5vdGhlciBicm93c2VyIHRhYi5cbiAgICAgKi9cbiAgICB0YWJWaXNpYmxlOiAndGFiVmlzaWJsZSdcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAndGFiLWV2ZW50cycsXG4gICAgRVZFTlRTOiBldmVudHMsXG4gICAgY29uZmlnOiBwbHVnaW5Db25maWcsXG4gICAgYm9vdHN0cmFwOiBmdW5jdGlvbiBib290c3RyYXAoX3JlZikge1xuICAgICAgdmFyIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZTtcblxuICAgICAgLyogRGlzcGF0Y2ggZXZlbnQgd2hlbiB0YWIgdmlzaWJsaXR5IGNoYW5nZXMgKi9cbiAgICAgIG9uVGFiQ2hhbmdlKGZ1bmN0aW9uIChpc0hpZGRlbikge1xuICAgICAgICBpbnN0YW5jZS5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogaXNIaWRkZW4gPyBldmVudHMudGFiSGlkZGVuIDogZXZlbnRzLnRhYlZpc2libGVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4vKipcbiAqIEZpcmUgYSBjYWxsYmFjayBvbiB0YWIgdmlzaWJpbGl0eSBjaGFuZ2VzXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBydW4gb24gdmlzaWJpbGl0eSBjaGFuZ2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBkZXRhY2ggb25UYWJDaGFuZ2UgbGlzdGVuZXJcbiAqL1xuXG5mdW5jdGlvbiBvblRhYkNoYW5nZShjYWxsYmFjaykge1xuICBpZiAoaXNTZXJ2ZXIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHByb3AgPSBnZXRIaWRkZW5Qcm9wKCk7XG4gIHZhciBldmVudCA9IFwiXCIuY29uY2F0KHByb3AucmVwbGFjZSgvW0h8aF1pZGRlbi8sICcnKSwgXCJ2aXNpYmlsaXR5Y2hhbmdlXCIpO1xuXG4gIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICByZXR1cm4gY2FsbGJhY2soQm9vbGVhbihkb2N1bWVudFtwcm9wXSkpO1xuICB9O1xuXG4gIHZhciBhdHRhY2hGdW5jID0gZnVuY3Rpb24gYXR0YWNoRnVuYygpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gIH07XG5cbiAgYXR0YWNoRnVuYygpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIpO1xuICAgIHJldHVybiBhdHRhY2hGdW5jO1xuICB9O1xufVxuLyoqXG4gKiBDaGVjayBpZiB0YWIgaXMgaGlkZGVuXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRhYiBoaWRkZW5cbiAqL1xuXG5mdW5jdGlvbiBpc1RhYkhpZGRlbigpIHtcbiAgaWYgKGlzU2VydmVyKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBCb29sZWFuKGRvY3VtZW50W2dldEhpZGRlblByb3AoKV0pO1xufVxuXG5mdW5jdGlvbiBnZXRIaWRkZW5Qcm9wKCkge1xuICB2YXIgcHJlZml4ZXMgPSBbJ3dlYmtpdCcsICdtb3onLCAnbXMnLCAnbyddOyAvLyBpZiAnaGlkZGVuJyBpcyBuYXRpdmVseSBzdXBwb3J0ZWQganVzdCByZXR1cm4gaXRcblxuICBpZiAoaXNTZXJ2ZXIgfHwgSElEREVOIGluIGRvY3VtZW50KSByZXR1cm4gSElEREVOOyAvLyBvdGhlcndpc2UgbG9vcCBvdmVyIGFsbCB0aGUga25vd24gcHJlZml4ZXMgdW50aWwgd2UgZmluZCBvbmVcblxuICByZXR1cm4gcHJlZml4ZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnIpIHtcbiAgICB2YXIgcHJvcCA9IGN1cnIgKyAnSGlkZGVuJztcbiAgICBpZiAoIWFjYyAmJiBwcm9wIGluIGRvY3VtZW50KSByZXR1cm4gcHJvcDtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBudWxsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGFiRXZlbnRzUGx1Z2luO1xuZXhwb3J0IHsgSElEREVOLCBvblRhYkNoYW5nZSwgaXNUYWJIaWRkZW4gfTtcbiIsImltcG9ydHthZGRMaXN0ZW5lciBhcyB0fWZyb21cIkBhbmFseXRpY3MvbGlzdGVuZXItdXRpbHNcIjtpbXBvcnR7b25UYWJDaGFuZ2UgYXMgbn1mcm9tXCJhbmFseXRpY3MtcGx1Z2luLXRhYi1ldmVudHNcIjtmdW5jdGlvbiBlKCl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIGU9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG8pJiYodFtvXT1lW29dKX1yZXR1cm4gdH0sZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIG89W1wibW91c2Vtb3ZlXCIsXCJtb3VzZWRvd25cIixcInRvdWNobW92ZVwiLFwidG91Y2hzdGFydFwiLFwidG91Y2hlbmRcIixcImtleWRvd25cIl07ZnVuY3Rpb24gcihlLHIpe3ZvaWQgMD09PXImJihyPXt9KTt2YXIgdT1mdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMsbz0hMTtyZXR1cm4gZnVuY3Rpb24ocil7b3x8KHQuY2FsbChlLHIpLG89ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBvPSExfSxuKSl9fShlLHIudGhyb3R0bGV8fDFlNCksaT1bXTtmdW5jdGlvbiBhKCl7dmFyIGU9bihmdW5jdGlvbih0KXt0fHx1KHt0eXBlOlwidGFiVmlzaWJsZVwifSl9KTtyZXR1cm4gaT1bZV0uY29uY2F0KG8ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KGRvY3VtZW50LG4sdSl9KSkuY29uY2F0KHQod2luZG93LFwibG9hZFwiLHUpKS5jb25jYXQodCh3aW5kb3csXCJzY3JvbGxcIix1LHtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9KSksY31mdW5jdGlvbiBjKCl7aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfXJldHVybiBhKCksZnVuY3Rpb24oKXtyZXR1cm4gYygpLGF9fWZ1bmN0aW9uIHUodCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLGEoZSh7b25JZGxlOnR9LG4pKX1mdW5jdGlvbiBpKHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSxhKGUoe29uV2FrZVVwOnR9LG4pKX1mdW5jdGlvbiBhKHQpe3ZhciBuLGUsbz10Lm9uSWRsZSx1PXQub25XYWtlVXAsaT10Lm9uSGVhcnRiZWF0LGE9dC50aW1lb3V0LGY9dm9pZCAwPT09YT8xZTQ6YSxsPXQudGhyb3R0bGUscz12b2lkIDA9PT1sPzJlMzpsLGQ9ITEsdj0hMSxwPW5ldyBEYXRlLG09ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KG4pfTtmdW5jdGlvbiB3KHQpe20oKSxpJiYhZCYmaShjKHApLHQpLHUmJmQmJihkPSExLHUoYyhlKSx0KSxwPW5ldyBEYXRlKSxuPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkPSEwLG8mJihlPW5ldyBEYXRlLG8oYyhwKSx0KSl9LGYpfXZhciBoPXIodyx7dGhyb3R0bGU6c30pO3JldHVybntkaXNhYmxlOmZ1bmN0aW9uKCl7dj0hMCxkPSExLG0oKTt2YXIgdD1oKCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHY9ITEscD1uZXcgRGF0ZSx3KHt0eXBlOlwibG9hZFwifSksdCgpfX0sZ2V0U3RhdHVzOmZ1bmN0aW9uKCl7cmV0dXJue2lzSWRsZTpkLGlzRGlzYWJsZWQ6dixhY3RpdmU6ZD8wOmMocCx2KSxpZGxlOmQ/YyhlLHYpOjB9fX19ZnVuY3Rpb24gYyh0LG4pe3JldHVybiBuPzA6TWF0aC5yb3VuZCgobmV3IERhdGUtdCkvMWUzKX1leHBvcnR7ciBhcyBvbkRvbUFjdGl2aXR5LHUgYXMgb25JZGxlLGEgYXMgb25Vc2VyQWN0aXZpdHksaSBhcyBvbldha2VVcH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmFseXRpY3MtdXRpbC1hY3Rpdml0eS5tb2R1bGUuanMubWFwXG4iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFNwcmVhZDInO1xuaW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAnQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3InO1xuaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcic7XG5pbXBvcnQgc21hcnRRdWV1ZSBmcm9tICdAYW5hbHl0aWNzL3F1ZXVlLXV0aWxzJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgeyBnZXRTZXNzaW9uLCBnZXRQYWdlU2Vzc2lvbiwgZ2V0VGFiU2Vzc2lvbiwgc2V0UGFnZVNlc3Npb24sIHNldFRhYlNlc3Npb24sIHNldFNlc3Npb24sIGV4dGVuZFNlc3Npb24gfSBmcm9tICdAYW5hbHl0aWNzL3Nlc3Npb24tdXRpbHMnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBpc1N0cmluZywgaXNCb29sZWFuIH0gZnJvbSAnQGFuYWx5dGljcy90eXBlLXV0aWxzJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICdhbmFseXRpY3MtdXRpbHMnO1xuaW1wb3J0IF90eXBlb2YgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHsgZ2V0SXRlbSwgcmVtb3ZlSXRlbSwgc2V0SXRlbSB9IGZyb20gJ0BhbmFseXRpY3MvbG9jYWxzdG9yYWdlLXV0aWxzJztcbmltcG9ydCB7IEF3c0NsaWVudCB9IGZyb20gJ2F3czRmZXRjaCc7XG5pbXBvcnQgeyBvblVzZXJBY3Rpdml0eSB9IGZyb20gJ0BhbmFseXRpY3MvYWN0aXZpdHktdXRpbHMnO1xuXG52YXIgT0JKX1RZUEUgPSAnb2JqZWN0JztcbnZhciBTVFJfVFlQRSA9ICdzdHJpbmcnO1xudmFyIFVOS05PV04gPSAnPyc7XG52YXIgTkFNRSA9ICduYW1lJztcbnZhciBWRVJTSU9OID0gJ3ZlcnNpb24nO1xudmFyIEVNUFRZID0gJyc7XG52YXIgRlVOQ19UWVBFID0gJ2Z1bmN0aW9uJztcbnZhciBVTkRFRl9UWVBFID0gJ3VuZGVmaW5lZCc7XG52YXIgQkxBQ0tCRVJSWSA9ICdCbGFja0JlcnJ5JyxcbiAgICBDSFJPTUUgPSAnQ2hyb21lJyxcbiAgICBGSVJFRk9YID0gJ0ZpcmVmb3gnO1xudmFyIHdpbmRvd3NWZXJzaW9uTWFwID0ge1xuICAnTUUnOiAnNC45MCcsXG4gICdOVCAzLjExJzogJ05UMy41MScsXG4gICdOVCA0LjAnOiAnTlQ0LjAnLFxuICAnMjAwMCc6ICdOVCA1LjAnLFxuICAnWFAnOiBbJ05UIDUuMScsICdOVCA1LjInXSxcbiAgJ1Zpc3RhJzogJ05UIDYuMCcsXG4gICc3JzogJ05UIDYuMScsXG4gICc4JzogJ05UIDYuMicsXG4gICc4LjEnOiAnTlQgNi4zJyxcbiAgJzEwJzogWydOVCA2LjQnLCAnTlQgMTAuMCddLFxuICAnUlQnOiAnQVJNJ1xufTtcbnZhciBvcyA9IFtbXG4vKiBXaW5kb3dzICovXG4vLyBXaW5kb3dzIChpVHVuZXMpXG4vbWljcm9zb2Z0ICh3aW5kb3dzKSAodmlzdGF8eHApL2ldLCBbTkFNRSwgVkVSU0lPTl0sIC8vIFdpbmRvd3MgUlRcblsvKHdpbmRvd3MpIG50IDZcXC4yOyAoYXJtKS9pLCAvLyBXaW5kb3dzIFBob25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4vKHdpbmRvd3MgKD86cGhvbmUoPzogb3MpP3xtb2JpbGUpKVtcXC8gXT8oW1xcZFxcLlxcdyBdKikvaSwgLyh3aW5kb3dzKVtcXC8gXT8oW250Y2VcXGRcXC4gXStcXHcpKD8hLit4Ym94KS9pXSwgW05BTUUsIFtWRVJTSU9OLCBzdHJNYXBwZXIsIHdpbmRvd3NWZXJzaW9uTWFwXV0sIFsvKHdpbig/PTN8OXxuKXx3aW4gOXggKShbbnRcXGRcXC5dKykvaV0sIFtbTkFNRSwgJ1dpbmRvd3MnXSwgW1ZFUlNJT04sIHN0ck1hcHBlciwgd2luZG93c1ZlcnNpb25NYXBdXSxcbi8qIGlPUy9tYWNPUyAqL1xuLy8gaU9TXG5bL2lwW2hvbmVhZF17Miw0fVxcYig/Oi4qb3MgKFtcXHddKykgbGlrZSBtYWN8OyBvcGVyYSkvaSwgL2NmbmV0d29ya1xcLy4rZGFyd2luL2ldLCBbW1ZFUlNJT04sIC9fL2csICcuJ10sIFtOQU1FLCAnaU9TJ11dLCAvLyBNYWMgT1NcblsvKG1hYyBvcyB4KSA/KFtcXHdcXC4gXSopL2ksIC8obWFjaW50b3NofG1hY19wb3dlcnBjXFxiKSg/IS4raGFpa3UpL2ldLCBbW05BTUUsICdNYWNPUyddLCBbVkVSU0lPTiwgL18vZywgJy4nXV0sXG4vKiAgTW9iaWxlIE9TZXMgKi9cbi8vIEFuZHJvaWQteDg2XG5bL2Ryb2lkIChbXFx3XFwuXSspXFxiLisoYW5kcm9pZFstIF14ODYpL2ldLCBbVkVSU0lPTiwgTkFNRV0sIC8vIEFuZHJvaWQvV2ViT1MvUU5YL0JhZGEvUklNL01hZW1vL01lZUdvL1NhaWxmaXNoIE9TXG5bLyhhbmRyb2lkfHdlYm9zfHFueHxiYWRhfHJpbSB0YWJsZXQgb3N8bWFlbW98bWVlZ298c2FpbGZpc2gpWy1cXC8gXT8oW1xcd1xcLl0qKS9pLCAvLyBCbGFja2JlcnJ5XG4vKGJsYWNrYmVycnkpXFx3KlxcLyhbXFx3XFwuXSopL2ksIC8vIFRpemVuL0thaU9TXG4vKHRpemVufGthaW9zKVtcXC8gXShbXFx3XFwuXSspL2ksIC8vIFNlcmllcyA0MFxuL1xcKChzZXJpZXM0MCk7L2ldLCBbTkFNRSwgVkVSU0lPTl0sIC8vIEJsYWNrQmVycnkgMTBcblsvXFwoYmIoMTApOy9pXSwgW1ZFUlNJT04sIFtOQU1FLCBCTEFDS0JFUlJZXV0sIC8vIEZpcmVmb3ggT1NcblsvbW96aWxsYVxcL1tcXGRcXC5dKyBcXCgoPzptb2JpbGV8dGFibGV0fHR2fG1vYmlsZTsgW1xcdyBdKyk7IHJ2Oi4rIGdlY2tvXFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgRklSRUZPWCArICcgT1MnXV0sIC8vIFdlYk9TXG5bL3dlYjBzOy4rcnQodHYpL2ksIC9cXGIoPzpocCk/d29zKD86YnJvd3Nlcik/XFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgJ3dlYk9TJ11dLCAvLyBHb29nbGUgQ2hyb21lY2FzdFxuWy9jcmtleVxcLyhbXFxkXFwuXSspL2ldLCAvLyBHb29nbGUgQ2hyb21lY2FzdFxuW1ZFUlNJT04sIFtOQU1FLCBDSFJPTUUgKyAnY2FzdCddXSwgLy8gQ2hyb21pdW0gT1NcblsvKGNyb3MpIFtcXHddKyAoW1xcd1xcLl0rXFx3KS9pXSwgW1tOQU1FLCAnQ2hyb21pdW0gT1MnXSwgVkVSU0lPTl0sIC8vIE90aGVyXG5bLy8gTWFnZWlhL1ZlY3RvckxpbnV4XG4vKG1hZ2VpYXx2ZWN0b3JsaW51eClbOyBdL2ksIC8vIFVidW50dS9EZWJpYW4vU1VTRS9HZW50b28vQXJjaC9TbGFja3dhcmUvRmVkb3JhL01hbmRyaXZhL0NlbnRPUy9QQ0xpbnV4T1MvUmVkSGF0L1plbndhbGsvTGlucHVzL1Jhc3BiaWFuL1BsYW45L01pbml4L1JJU0NPUy9Db250aWtpL0RlZXBpbi9NYW5qYXJvL2VsZW1lbnRhcnkvU2FiYXlvbi9MaW5zcGlyZVxuLyhba3hsbl0/dWJ1bnR1fGRlYmlhbnxzdXNlfG9wZW5zdXNlfGdlbnRvb3xhcmNoKD89IGxpbnV4KXxzbGFja3dhcmV8ZmVkb3JhfG1hbmRyaXZhfGNlbnRvc3xwY2xpbnV4b3N8cmVkID9oYXR8emVud2Fsa3xsaW5wdXN8cmFzcGJpYW58cGxhbiA5fG1pbml4fHJpc2Mgb3N8Y29udGlraXxkZWVwaW58bWFuamFyb3xlbGVtZW50YXJ5IG9zfHNhYmF5b258bGluc3BpcmUpKD86IGdudVxcL2xpbnV4KT8oPzogZW50ZXJwcmlzZSk/KD86Wy0gXWxpbnV4KT8oPzotZ251KT9bLVxcLyBdPyg/IWNocm9tfHBhY2thZ2UpKFstXFx3XFwuXSopL2ksIC8vIEh1cmQvTGludXhcbi8oaHVyZHxsaW51eCkgPyhbXFx3XFwuXSopL2ksIC8vIEdOVVxuLyhnbnUpID8oW1xcd1xcLl0qKS9pLCAvLyBVTklYXG4vKHVuaXgpID8oW1xcd1xcLl0qKS9pXSwgW05BTUUsIFZFUlNJT05dXTtcblxuZnVuY3Rpb24gcmd4TWFwcGVyKHVhLCBhcnJheXMpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgaixcbiAgICAgIGssXG4gICAgICBwLFxuICAgICAgcSxcbiAgICAgIG1hdGNoZXMsXG4gICAgICBtYXRjaDsgLy8gbG9vcCB0aHJvdWdoIGFsbCByZWdleGVzIG1hcHNcblxuICB3aGlsZSAoaSA8IGFycmF5cy5sZW5ndGggJiYgIW1hdGNoZXMpIHtcbiAgICB2YXIgcmVnZXggPSBhcnJheXNbaV0sXG4gICAgICAgIC8vIGV2ZW4gc2VxdWVuY2UgKDAsMiw0LC4uKVxuICAgIHByb3BzID0gYXJyYXlzW2kgKyAxXTsgLy8gb2RkIHNlcXVlbmNlICgxLDMsNSwuLilcblxuICAgIGogPSBrID0gMDsgLy8gdHJ5IG1hdGNoaW5nIHVhc3RyaW5nIHdpdGggcmVnZXhlc1xuXG4gICAgd2hpbGUgKGogPCByZWdleC5sZW5ndGggJiYgIW1hdGNoZXMpIHtcbiAgICAgIG1hdGNoZXMgPSByZWdleFtqKytdLmV4ZWModWEpO1xuXG4gICAgICBpZiAoISFtYXRjaGVzKSB7XG4gICAgICAgIGZvciAocCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xuICAgICAgICAgIG1hdGNoID0gbWF0Y2hlc1srK2tdO1xuICAgICAgICAgIHEgPSBwcm9wc1twXTsgLy8gY2hlY2sgaWYgZ2l2ZW4gcHJvcGVydHkgaXMgYWN0dWFsbHkgYXJyYXlcblxuICAgICAgICAgIGlmIChfdHlwZW9mKHEpID09PSBPQkpfVFlQRSAmJiBxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChxLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgIGlmIChfdHlwZW9mKHFbMV0pID09IEZVTkNfVFlQRSkge1xuICAgICAgICAgICAgICAgIC8vIGFzc2lnbiBtb2RpZmllZCBtYXRjaFxuICAgICAgICAgICAgICAgIHRoaXNbcVswXV0gPSBxWzFdLmNhbGwodGhpcywgbWF0Y2gpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFzc2lnbiBnaXZlbiB2YWx1ZSwgaWdub3JlIHJlZ2V4IG1hdGNoXG4gICAgICAgICAgICAgICAgdGhpc1txWzBdXSA9IHFbMV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocS5sZW5ndGggPT0gMykge1xuICAgICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIGZ1bmN0aW9uIG9yIHJlZ2V4XG4gICAgICAgICAgICAgIGlmIChfdHlwZW9mKHFbMV0pID09PSBGVU5DX1RZUEUgJiYgIShxWzFdLmV4ZWMgJiYgcVsxXS50ZXN0KSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZnVuY3Rpb24gKHVzdWFsbHkgc3RyaW5nIG1hcHBlcilcbiAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzFdLmNhbGwodGhpcywgbWF0Y2gsIHFbMl0pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHNhbml0aXplIG1hdGNoIHVzaW5nIGdpdmVuIHJlZ2V4XG4gICAgICAgICAgICAgICAgdGhpc1txWzBdXSA9IG1hdGNoID8gbWF0Y2gucmVwbGFjZShxWzFdLCBxWzJdKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChxLmxlbmd0aCA9PSA0KSB7XG4gICAgICAgICAgICAgIHRoaXNbcVswXV0gPSBtYXRjaCA/IHFbM10uY2FsbCh0aGlzLCBtYXRjaC5yZXBsYWNlKHFbMV0sIHFbMl0pKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpc1txXSA9IG1hdGNoID8gbWF0Y2ggOiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaSArPSAyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0ck1hcHBlcihzdHIsIG1hcCkge1xuICBmb3IgKHZhciBpIGluIG1hcCkge1xuICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgdmFsdWUgaXMgYXJyYXlcbiAgICBpZiAoX3R5cGVvZihtYXBbaV0pID09PSBPQkpfVFlQRSAmJiBtYXBbaV0ubGVuZ3RoID4gMCkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXBbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGhhcyhtYXBbaV1bal0sIHN0cikpIHtcbiAgICAgICAgICByZXR1cm4gaSA9PT0gVU5LTk9XTiA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhhcyhtYXBbaV0sIHN0cikpIHtcbiAgICAgIHJldHVybiBpID09PSBVTktOT1dOID8gdW5kZWZpbmVkIDogaTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiBoYXMoc3RyMSwgc3RyMikge1xuICByZXR1cm4gX3R5cGVvZihzdHIxKSA9PT0gU1RSX1RZUEUgPyBsb3dlcml6ZShzdHIyKS5pbmRleE9mKGxvd2VyaXplKHN0cjEpKSAhPT0gLTEgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG93ZXJpemUoc3RyKSB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gZ2V0T1ModWEpIHtcbiAgdmFyIF91YSA9IHVhIHx8ICgodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKHdpbmRvdykpICE9PSBVTkRFRl9UWVBFICYmIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IEVNUFRZKTtcblxuICB2YXIgX29zID0ge307XG4gIF9vc1tOQU1FXSA9IHVuZGVmaW5lZDtcbiAgX29zW1ZFUlNJT05dID0gdW5kZWZpbmVkO1xuICByZ3hNYXBwZXIuY2FsbChfb3MsIF91YSwgb3MpO1xuICByZXR1cm4gX29zO1xufVxuXG52YXIgQlJBVkUgPSAnQnJhdmUnO1xuZnVuY3Rpb24gYnJvd3NlckNsaWVudEluZm8oKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGlmICghd2luZG93Lm5hdmlnYXRvcikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHZhciBfd2luZG93JG5hdmlnYXRvciA9IHdpbmRvdy5uYXZpZ2F0b3IsXG4gICAgICBwbGF0Zm9ybSA9IF93aW5kb3ckbmF2aWdhdG9yLnBsYXRmb3JtLFxuICAgICAgcHJvZHVjdCA9IF93aW5kb3ckbmF2aWdhdG9yLnByb2R1Y3QsXG4gICAgICB2ZW5kb3IgPSBfd2luZG93JG5hdmlnYXRvci52ZW5kb3I7XG5cbiAgdmFyIF9icm93c2VyVHlwZSA9IGJyb3dzZXJUeXBlKHdpbmRvdy5uYXZpZ2F0b3IpLFxuICAgICAgdHlwZSA9IF9icm93c2VyVHlwZS50eXBlLFxuICAgICAgdmVyc2lvbiA9IF9icm93c2VyVHlwZS52ZXJzaW9uO1xuXG4gIHZhciB2ZW5kZXIgPSB0eXBlID09PSBCUkFWRSA/IHR5cGUgOiAodmVuZG9yIHx8ICcnKS5zcGxpdCgnICcpWzBdO1xuICByZXR1cm4ge1xuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSxcbiAgICBvczogZ2V0T1MoKSxcbiAgICBtYWtlOiB2ZW5kZXIgfHwgcHJvZHVjdCxcbiAgICAvLyBwcm9kdWN0IGFsd2F5cyBnZWNrb1xuICAgIG1vZGVsOiB0eXBlLFxuICAgIHZlcnNpb246IHZlcnNpb24sXG4gICAgbmFtZTogW3R5cGUsIHZlcnNpb25dLmpvaW4oJy8nKSxcbiAgICBsYW5ndWFnZTogZ2V0TGFuZ3VhZ2UoKSxcbiAgICB0aW1lem9uZTogYnJvd3NlclRpbWV6b25lKClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TGFuZ3VhZ2UoKSB7XG4gIHZhciBfd2luZG93JG5hdmlnYXRvcjIgPSB3aW5kb3cubmF2aWdhdG9yLFxuICAgICAgbGFuZ3VhZ2UgPSBfd2luZG93JG5hdmlnYXRvcjIubGFuZ3VhZ2UsXG4gICAgICBicm93c2VyTGFuZ3VhZ2UgPSBfd2luZG93JG5hdmlnYXRvcjIuYnJvd3Nlckxhbmd1YWdlLFxuICAgICAgbGFuZ3VhZ2VzID0gX3dpbmRvdyRuYXZpZ2F0b3IyLmxhbmd1YWdlcztcbiAgcmV0dXJuIChsYW5ndWFnZSB8fCBicm93c2VyTGFuZ3VhZ2UgfHwgKGxhbmd1YWdlcyB8fCBbJ2VuX1VTJ10pWzBdKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy0nLCAnXycpO1xufVxuXG5mdW5jdGlvbiBicm93c2VyVGltZXpvbmUoKSB7XG4gIHZhciB0ek1hdGNoID0gL1xcKChbQS1aYS16XFxzXS4qKVxcKS8uZXhlYyhuZXcgRGF0ZSgpLnRvU3RyaW5nKCkpO1xuICByZXR1cm4gdHpNYXRjaCA/IHR6TWF0Y2hbMV0gfHwgJycgOiAnJztcbn1cblxuZnVuY3Rpb24gYnJvd3NlclR5cGUobmF2aWdhdG9yKSB7XG4gIHZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICB2YXIgb3BlcmFNYXRjaCA9IC8uKyhPcGVyYVtcXHNbQS1aXSp8T1BSW1xcc0EtWl0qKVxcLyhbMC05XFwuXSspLiovaS5leGVjKHVzZXJBZ2VudCk7XG5cbiAgaWYgKG9wZXJhTWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogb3BlcmFNYXRjaFsxXSxcbiAgICAgIHZlcnNpb246IG9wZXJhTWF0Y2hbMl1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGllTWF0Y2ggPSAvLisoVHJpZGVudHxFZGdlKVxcLyhbMC05XFwuXSspLiovaS5leGVjKHVzZXJBZ2VudCk7XG5cbiAgaWYgKGllTWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogaWVNYXRjaFsxXSxcbiAgICAgIHZlcnNpb246IGllTWF0Y2hbMl1cbiAgICB9O1xuICB9IC8vIGhlYWRsZXNzIGNocm9tZVxuXG5cbiAgdmFyIGhlYWRsZXNzID0gLyhoZWFkbGVzc2Nocm9tZSkoPzpcXC8oW1xcd1xcLl0rKXwgKS9pLmV4ZWModXNlckFnZW50KTtcblxuICBpZiAoaGVhZGxlc3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogaGVhZGxlc3NbMV0sXG4gICAgICB2ZXJzaW9uOiBoZWFkbGVzc1syXVxuICAgIH07XG4gIH1cblxuICB2YXIgY2hyb21lTWF0Y2ggPSAvLisoQ2hyb21lfEZpcmVmb3h8RnhpT1MpXFwvKFswLTlcXC5dKykuKi9pLmV4ZWModXNlckFnZW50KTtcblxuICBpZiAoY2hyb21lTWF0Y2gpIHtcbiAgICB2YXIgaXNCcmF2ZSA9IG5hdmlnYXRvci5icmF2ZSAmJiBuYXZpZ2F0b3IuYnJhdmUuaXNCcmF2ZSB8fCBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogaXNCcmF2ZSA/IEJSQVZFIDogY2hyb21lTWF0Y2hbMV0sXG4gICAgICB2ZXJzaW9uOiBjaHJvbWVNYXRjaFsyXVxuICAgIH07XG4gIH1cblxuICB2YXIgc2FmYXJpTWF0Y2ggPSAvLisoU2FmYXJpKVxcLyhbMC05XFwuXSspLiovaS5leGVjKHVzZXJBZ2VudCk7XG5cbiAgaWYgKHNhZmFyaU1hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHNhZmFyaU1hdGNoWzFdLFxuICAgICAgdmVyc2lvbjogc2FmYXJpTWF0Y2hbMl1cbiAgICB9O1xuICB9XG5cbiAgdmFyIHdlYmtpdE1hdGNoID0gLy4rKEFwcGxlV2ViS2l0KVxcLyhbMC05XFwuXSspLiovaS5leGVjKHVzZXJBZ2VudCk7XG5cbiAgaWYgKHdlYmtpdE1hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHdlYmtpdE1hdGNoWzFdLFxuICAgICAgdmVyc2lvbjogd2Via2l0TWF0Y2hbMl1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGFueU1hdGNoID0gLy4qKFtBLVpdKylcXC8oWzAtOVxcLl0rKS4qL2kuZXhlYyh1c2VyQWdlbnQpO1xuICB2YXIgZmFsbGJhY2sgPSBhbnlNYXRjaCB8fCBbJycsICdOQScsICcwLjAuMCddO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGZhbGxiYWNrWzFdLFxuICAgIHZlcnNpb246IGZhbGxiYWNrWzJdXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50TmFtZShrZXkpIHtcbiAgdmFyIGV2ZW50TWFwID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgcmV0dXJuIGV2ZW50TWFwW2tleV0gfHwga2V5O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlQXR0cmlidXRlcyhfeCkge1xuICByZXR1cm4gX3ByZXBhcmVBdHRyaWJ1dGVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG4vKipcbiAqIFByZXBhcmVzIGFuIG9iamVjdCBmb3IgaW5jbHVzaW9uIGluIGVuZHBvaW50IGRhdGEgb3IgZXZlbnQgZGF0YS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbWV0cmljc1xuICovXG5cbmZ1bmN0aW9uIF9wcmVwYXJlQXR0cmlidXRlcygpIHtcbiAgX3ByZXBhcmVBdHRyaWJ1dGVzID0gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gX2NhbGxlZShhdHRyaWJ1dGVzKSB7XG4gICAgdmFyIGFzQXJyYXksXG4gICAgICAgIHNhbml0aXplZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHByZXBWYWx1ZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgX2FyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGFzQXJyYXkgPSBfYXJncy5sZW5ndGggPiAxICYmIF9hcmdzWzFdICE9PSB1bmRlZmluZWQgPyBfYXJnc1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgc2FuaXRpemVkID0ge307XG4gICAgICAgICAgICBfY29udGV4dC50MCA9IF9yZWdlbmVyYXRvclJ1bnRpbWUua2V5cyhhdHRyaWJ1dGVzKTtcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGlmICgoX2NvbnRleHQudDEgPSBfY29udGV4dC50MCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbWUgPSBfY29udGV4dC50MS52YWx1ZTtcbiAgICAgICAgICAgIHZhbHVlID0gQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVzW25hbWVdKSA/IGF0dHJpYnV0ZXNbbmFtZV0gOiBbYXR0cmlidXRlc1tuYW1lXV07XG4gICAgICAgICAgICBwcmVwVmFsdWUgPSBhc0FycmF5ID8gdmFsdWUgOiB2YWx1ZVswXTsgLy8gY29uc29sZS5sb2coYG5hbWUgJHtuYW1lfWAsIHByZXBWYWx1ZSlcblxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDk7XG4gICAgICAgICAgICByZXR1cm4gcHJlcGFyZURhdGEocHJlcFZhbHVlLCBzYW5pdGl6ZUF0dHJpYnV0ZSk7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBkYXRhID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgLyogUmVtb3ZlIGFueSBudWxsL3VuZGVmaW5lZCB2YWx1ZXMgKi9cbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihkYXRhKSkge1xuICAgICAgICAgICAgICBzYW5pdGl6ZWRbbmFtZV0gPSBkYXRhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgc2FuaXRpemVkKTtcblxuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUpO1xuICB9KSk7XG4gIHJldHVybiBfcHJlcGFyZUF0dHJpYnV0ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1ldHJpY3MoX3gyKSB7XG4gIHJldHVybiBfcHJlcGFyZU1ldHJpY3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogUmVzb2x2ZXMgYW4gYXR0cmlidXRlIG9yIG1ldHJpYyB2YWx1ZSBhbmQgc2FuaXRpemUgaXQuXG4gKlxuICogQHBhcmFtIHttaXhlZH0gdmFsdWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNhbml0aXplQ2FsbGJhY2tcbiAqL1xuXG5mdW5jdGlvbiBfcHJlcGFyZU1ldHJpY3MoKSB7XG4gIF9wcmVwYXJlTWV0cmljcyA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKG1ldHJpY3MpIHtcbiAgICB2YXIgc2FuaXRpemVkLCBuYW1lO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgc2FuaXRpemVkID0ge307XG4gICAgICAgICAgICBfY29udGV4dDIudDAgPSBfcmVnZW5lcmF0b3JSdW50aW1lLmtleXMobWV0cmljcyk7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBpZiAoKF9jb250ZXh0Mi50MSA9IF9jb250ZXh0Mi50MCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbWUgPSBfY29udGV4dDIudDEudmFsdWU7XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDY7XG4gICAgICAgICAgICByZXR1cm4gcHJlcGFyZURhdGEobWV0cmljc1tuYW1lXSwgc2FuaXRpemVNZXRyaWMpO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgc2FuaXRpemVkW25hbWVdID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHNhbml0aXplZCk7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTIpO1xuICB9KSk7XG4gIHJldHVybiBfcHJlcGFyZU1ldHJpY3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZURhdGEoX3gzLCBfeDQpIHtcbiAgcmV0dXJuIF9wcmVwYXJlRGF0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuLyoqXG4gKiBFbnN1cmUgdmFsdWUgaXMgYSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0ge21peGVkfSB2YWx1ZVxuICovXG5cblxuZnVuY3Rpb24gX3ByZXBhcmVEYXRhKCkge1xuICBfcHJlcGFyZURhdGEgPSBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlMyh2YWx1ZSwgc2FuaXRpemVDYWxsYmFjaykge1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0Mykge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaWYgKCEodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDM7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUoKTtcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHZhbHVlID0gX2NvbnRleHQzLnNlbnQ7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdChcInJldHVyblwiLCBzYW5pdGl6ZUNhbGxiYWNrKHZhbHVlKSk7XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMyk7XG4gIH0pKTtcbiAgcmV0dXJuIF9wcmVwYXJlRGF0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUF0dHJpYnV0ZSh2YWx1ZSkge1xuICAvLyBJZiBudWxsIG9yIHVuZGVmaW5lZFxuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5maWx0ZXIobm90RW1wdHkpLm1hcChmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gdmFsLnRvU3RyaW5nKCk7XG4gICAgfSk7XG4gIH0gLy8gQFRPRE8gZ3VhcmQgYWdhaW5zdCBudWxsIGhlcmVcblxuXG4gIHJldHVybiBpc051bGxPclVuZGVmKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogRW5zdXJlIHZhbHVlIGlzIGEgc2luZ2xlIGZsb2F0LlxuICpcbiAqIEBwYXJhbSB7bWl4ZWR9IHZhbHVlXG4gKi9cblxuXG5mdW5jdGlvbiBzYW5pdGl6ZU1ldHJpYyh2YWx1ZSkge1xuICByZXR1cm4gcGFyc2VGbG9hdChOdW1iZXIoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIG5vdEVtcHR5KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgIT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsO1xufVxuXG4vKiBUaGUgZW5kcG9pbnQgYmVnYW4gYSBuZXcgc2Vzc2lvbi4gKi9cbnZhciBTRVNTSU9OX1NUQVJUJDEgPSAnX3Nlc3Npb24uc3RhcnQnO1xuLyogVGhlIGVuZHBvaW50IGVuZGVkIGEgc2Vzc2lvbi4gKi9cblxudmFyIFNFU1NJT05fU1RPUCQyID0gJ19zZXNzaW9uLnN0b3AnO1xuLyogVGhlIGVuZHBvaW50IHBhdXNlZCBhIHNlc3Npb24uIFBhdXNlZCBzZXNzaW9ucyBjYW4gYmUgcmVzdW1lZCBzbyB0aGF0IHlvdSBjYW4gY29udGludWUgdG8gY29sbGVjdCBtZXRyaWNzIHdpdGhvdXQgc3RhcnRpbmcgYW4gZW50aXJlbHkgbmV3IHNlc3Npb24uICovXG5cbnZhciBTRVNTSU9OX1BBVVNFID0gJ19zZXNzaW9uLnBhdXNlJztcbi8qIFRoZSBlbmRwb2ludCByZXN1bWVkIGEgc2Vzc2lvbi4gKi9cblxudmFyIFNFU1NJT05fUkVTVU1FID0gJ19zZXNzaW9uLnJlc3VtZSc7XG4vKiBUaGUgZW5kcG9pbnQgbG9nZ2VkIGluIHRvIHlvdXIgYXBwLiAqL1xuXG52YXIgQVVUSF9TSUdOX0lOID0gJ191c2VyYXV0aC5zaWduX2luJztcbi8qIEEgbmV3IGVuZHBvaW50IGNvbXBsZXRlZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaW4geW91ciBhcHAuICovXG5cbnZhciBBVVRIX1NJR05fVVAgPSAnX3VzZXJhdXRoLnNpZ25fdXAnO1xuLyogVGhlIGVuZHBvaW50IGF0dGVtcHRlZCB0byBzaWduIGluIHRvIHlvdXIgYXBwLCBidXQgd2Fzbid0IGFibGUgdG8gY29tcGxldGUgdGhlIHByb2Nlc3MuICovXG5cbnZhciBBVVRIX0ZBSUwgPSAnX3VzZXJhdXRoLmF1dGhfZmFpbCc7XG4vKiBUaGUgZW5kcG9pbnQgbWFkZSBhIHB1cmNoYXNlIGluIHlvdXIgYXBwLiAqL1xuXG52YXIgRUNPTV9QVVJDSEFTRSA9ICdfbW9uZXRpemF0aW9uLnB1cmNoYXNlJztcbi8qIFRoZSBwYWdldmlldyBldmVudCAqL1xuXG52YXIgUEFHRV9WSUVXID0gJ3BhZ2VWaWV3JztcblxudmFyIGV2ZW50cyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBTRVNTSU9OX1NUQVJUOiBTRVNTSU9OX1NUQVJUJDEsXG4gIFNFU1NJT05fU1RPUDogU0VTU0lPTl9TVE9QJDIsXG4gIFNFU1NJT05fUEFVU0U6IFNFU1NJT05fUEFVU0UsXG4gIFNFU1NJT05fUkVTVU1FOiBTRVNTSU9OX1JFU1VNRSxcbiAgQVVUSF9TSUdOX0lOOiBBVVRIX1NJR05fSU4sXG4gIEFVVEhfU0lHTl9VUDogQVVUSF9TSUdOX1VQLFxuICBBVVRIX0ZBSUw6IEFVVEhfRkFJTCxcbiAgRUNPTV9QVVJDSEFTRTogRUNPTV9QVVJDSEFTRSxcbiAgUEFHRV9WSUVXOiBQQUdFX1ZJRVdcbn0pO1xuXG5mdW5jdGlvbiBmb3JtYXRFdmVudChfeCkge1xuICByZXR1cm4gX2Zvcm1hdEV2ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9mb3JtYXRFdmVudCgpIHtcbiAgX2Zvcm1hdEV2ZW50ID0gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gX2NhbGxlZShldmVudE5hbWUpIHtcbiAgICB2YXIgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBhcHBUaXRsZSxcbiAgICAgICAgYXBwUGFja2FnZU5hbWUsXG4gICAgICAgIGFwcFZlcnNpb25Db2RlLFxuICAgICAgICBldmVudE1hcHBpbmcsXG4gICAgICAgIGVucmljaEV2ZW50QXR0cmlidXRlcyxcbiAgICAgICAgZW5yaWNoRXZlbnRNZXRyaWNzLFxuICAgICAgICBkZWJ1ZyxcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICB0eXBlLFxuICAgICAgICBzZXNzaW9uRGF0YSxcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBzZXNzaW9uU3RhcnQsXG4gICAgICAgIHNlc3Npb25TdGFydFVuaXgsXG4gICAgICAgIHBhZ2VTZXNzaW9uSW5mbyxcbiAgICAgICAgdGFiU2Vzc2lvbkRhdGEsXG4gICAgICAgIGV2ZW50QXR0cmlicyxcbiAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgdGltZSxcbiAgICAgICAgdGltZVN0YW1wLFxuICAgICAgICBzZXNzaW9uRHVyYXRpb24sXG4gICAgICAgIGRlZmF1bHRFdmVudEF0dHJpYnV0ZXMsXG4gICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgZXZlbnRBdHRyaWJ1dGVzLFxuICAgICAgICB1c2VyRGVmaW5lZE1ldHJpY3MsXG4gICAgICAgIGRlZmF1bHRNZXRyaWNzLFxuICAgICAgICBleHRyYU1ldHJpY3MsXG4gICAgICAgIGV2ZW50TWV0cmljcyxcbiAgICAgICAgcHJlcGFyZWREYXRhLFxuICAgICAgICBldmVudFBheWxvYWQsXG4gICAgICAgIF9hcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBkYXRhID0gX2FyZ3MubGVuZ3RoID4gMSAmJiBfYXJnc1sxXSAhPT0gdW5kZWZpbmVkID8gX2FyZ3NbMV0gOiB7fTtcbiAgICAgICAgICAgIGNvbmZpZyA9IF9hcmdzLmxlbmd0aCA+IDIgJiYgX2FyZ3NbMl0gIT09IHVuZGVmaW5lZCA/IF9hcmdzWzJdIDoge307XG4gICAgICAgICAgICBhcHBUaXRsZSA9IGNvbmZpZy5hcHBUaXRsZSwgYXBwUGFja2FnZU5hbWUgPSBjb25maWcuYXBwUGFja2FnZU5hbWUsIGFwcFZlcnNpb25Db2RlID0gY29uZmlnLmFwcFZlcnNpb25Db2RlLCBldmVudE1hcHBpbmcgPSBjb25maWcuZXZlbnRNYXBwaW5nLCBlbnJpY2hFdmVudEF0dHJpYnV0ZXMgPSBjb25maWcuZW5yaWNoRXZlbnRBdHRyaWJ1dGVzLCBlbnJpY2hFdmVudE1ldHJpY3MgPSBjb25maWcuZW5yaWNoRXZlbnRNZXRyaWNzLCBkZWJ1ZyA9IGNvbmZpZy5kZWJ1ZztcbiAgICAgICAgICAgIGxvZ2dlciA9IGRlYnVnID8gY29uc29sZS5sb2cgOiBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgIHR5cGUgPSBnZXRFdmVudE5hbWUoZXZlbnROYW1lLCBldmVudE1hcHBpbmcpO1xuICAgICAgICAgICAgc2Vzc2lvbkRhdGEgPSBnZXRTZXNzaW9uKCk7IC8vIEBUT0RPIHJlZmFjdG9yIHNlc3Npb24gZ3JhYmJlclxuXG4gICAgICAgICAgICBzZXNzaW9uSWQgPSBkYXRhLnNlc3Npb25JZCB8fCBzZXNzaW9uRGF0YS5pZDtcbiAgICAgICAgICAgIHNlc3Npb25TdGFydCA9IGRhdGEuc2Vzc2lvblN0YXJ0IHx8IHNlc3Npb25EYXRhLmNyZWF0ZWRBdDtcbiAgICAgICAgICAgIHNlc3Npb25TdGFydFVuaXggPSBkYXRhLnNlc3Npb25TdGFydCA/IG5ldyBEYXRlKGRhdGEuc2Vzc2lvblN0YXJ0KS5nZXRUaW1lKCkgOiBzZXNzaW9uRGF0YS5jcmVhdGVkO1xuICAgICAgICAgICAgbG9nZ2VyKCdldmVudCBzZXNzaW9uRGF0YSAgICAnLCBKU09OLnN0cmluZ2lmeShzZXNzaW9uRGF0YSkpO1xuXG4gICAgICAgICAgICBpZiAoaXNCcm93c2VyKSB7XG4gICAgICAgICAgICAgIHBhZ2VTZXNzaW9uSW5mbyA9IGdldFBhZ2VTZXNzaW9uKCk7XG4gICAgICAgICAgICAgIHRhYlNlc3Npb25EYXRhID0gZ2V0VGFiU2Vzc2lvbigpO1xuICAgICAgICAgICAgICBsb2dnZXIoJ2V2ZW50IHBhZ2VTZXNzaW9uSW5mbycsIEpTT04uc3RyaW5naWZ5KHBhZ2VTZXNzaW9uSW5mbykpO1xuICAgICAgICAgICAgICBsb2dnZXIoJ2V2ZW50IHRhYlNlc3Npb25EYXRhICcsIEpTT04uc3RyaW5naWZ5KHRhYlNlc3Npb25EYXRhKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50QXR0cmlicyA9IGRhdGEuYXR0cmlidXRlcyB8fCB7fTtcbiAgICAgICAgICAgIGV2ZW50SWQgPSBkYXRhLmV2ZW50SWQgfHwgdXVpZCgpO1xuICAgICAgICAgICAgdGltZSA9IGRhdGEudGltZSA/IG5ldyBEYXRlKGRhdGEudGltZSkgOiBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdGltZVN0YW1wID0gdGltZS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgc2Vzc2lvbkR1cmF0aW9uID0gdGltZS5nZXRUaW1lKCkgLSBzZXNzaW9uU3RhcnRVbml4O1xuICAgICAgICAgICAgZGVmYXVsdEV2ZW50QXR0cmlidXRlcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgICBkYXRlOiB0aW1lU3RhbXAsXG4gICAgICAgICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkXG4gICAgICAgICAgICB9LCAhaXNCcm93c2VyID8ge30gOiB7XG4gICAgICAgICAgICAgIHBhZ2VTZXNzaW9uOiBwYWdlU2Vzc2lvbkluZm8uaWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIWVucmljaEV2ZW50QXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjM7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjA7XG4gICAgICAgICAgICByZXR1cm4gZW5yaWNoRXZlbnRBdHRyaWJ1dGVzKCk7XG5cbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgX2NvbnRleHQudDAgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI0O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgX2NvbnRleHQudDAgPSB7fTtcblxuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMgPSBfY29udGV4dC50MDtcblxuICAgICAgICAgICAgLyogRm9ybWF0IGF0dHJpYnV0ZXMgKi9cbiAgICAgICAgICAgIGV2ZW50QXR0cmlidXRlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkZWZhdWx0RXZlbnRBdHRyaWJ1dGVzKSwgZXh0cmFBdHRyaWJ1dGVzKSwgZXZlbnRBdHRyaWJzKTtcbiAgICAgICAgICAgIC8qIEZvcm1hdCBtZXRyaWNzICovXG4gICAgICAgICAgICAvLyBjb25zdCBlbGFwc2VkU2Vzc2lvblRpbWUgPSBlbGFwc2VkICsgKHRpbWUuZ2V0VGltZSgpIC0gc3ViU2Vzc2lvblN0YXJ0KVxuXG4gICAgICAgICAgICB1c2VyRGVmaW5lZE1ldHJpY3MgPSBkYXRhLm1ldHJpY3MgfHwge307XG4gICAgICAgICAgICBkZWZhdWx0TWV0cmljcyA9IHtcbiAgICAgICAgICAgICAgLyogVGltZSBvZiBzZXNzaW9uICovXG4gICAgICAgICAgICAgIHNlc3Npb25UaW1lOiBzZXNzaW9uRGF0YS5lbGFwc2VkIHx8IHNlc3Npb25EdXJhdGlvbixcblxuICAgICAgICAgICAgICAvKiBEYXRlIG1ldHJpY3MgKi9cbiAgICAgICAgICAgICAgaG91cjogdGltZS5nZXRIb3VycygpLFxuICAgICAgICAgICAgICBkYXk6IHRpbWUuZ2V0RGF5KCkgKyAxLFxuICAgICAgICAgICAgICBtb250aDogdGltZS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgICAgeWVhcjogdGltZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoIWVucmljaEV2ZW50TWV0cmljcykge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMzQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMzE7XG4gICAgICAgICAgICByZXR1cm4gZW5yaWNoRXZlbnRNZXRyaWNzKCk7XG5cbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgX2NvbnRleHQudDEgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDM1O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgX2NvbnRleHQudDEgPSB7fTtcblxuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICBleHRyYU1ldHJpY3MgPSBfY29udGV4dC50MTtcbiAgICAgICAgICAgIGV2ZW50TWV0cmljcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkZWZhdWx0TWV0cmljcyksIGV4dHJhTWV0cmljcyksIHVzZXJEZWZpbmVkTWV0cmljcyk7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMzk7XG4gICAgICAgICAgICByZXR1cm4gcHJlcGFyZUF0dHJpYnV0ZXMoZXZlbnRBdHRyaWJ1dGVzKTtcblxuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICBfY29udGV4dC50MiA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNDI7XG4gICAgICAgICAgICByZXR1cm4gcHJlcGFyZU1ldHJpY3MoZXZlbnRNZXRyaWNzKTtcblxuICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICBfY29udGV4dC50MyA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICBwcmVwYXJlZERhdGEgPSB7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9jb250ZXh0LnQyLFxuICAgICAgICAgICAgICBtZXRyaWNzOiBfY29udGV4dC50M1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxvZ2dlcihcIlwiLmNvbmNhdChldmVudElkLCBcIjpcIikuY29uY2F0KHR5cGUpKTtcbiAgICAgICAgICAgIGxvZ2dlcignZXZlbnRBdHRyaWJ1dGVzJywgcHJlcGFyZWREYXRhLmF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgbG9nZ2VyKCdldmVudE1ldHJpY3MnLCBwcmVwYXJlZERhdGEubWV0cmljcyk7XG5cbiAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyKCdjbGllbnRJbmZvJywgYnJvd3NlckNsaWVudEluZm8oKSk7XG4gICAgICAgICAgICB9IC8vIGNvbnN0IGFwcFZlcnNpb25Db2RlU3RyaW5nID0gZ2V0QXBwVmVyc2lvbkNvZGUoY29uZmlnKVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9QaW5wb2ludC5odG1sI3B1dEV2ZW50cy1wcm9wZXJ0eVxuXG5cbiAgICAgICAgICAgIGV2ZW50UGF5bG9hZCA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgZXZlbnRJZCwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgICAgLyogVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICovXG4gICAgICAgICAgICAgIEV2ZW50VHlwZTogdHlwZSxcblxuICAgICAgICAgICAgICAvKiBUaGUgZGF0ZSBhbmQgdGltZSwgaW4gSVNPIDg2MDEgZm9ybWF0LCB3aGVuIHRoZSBldmVudCBvY2N1cnJlZC4gKi9cbiAgICAgICAgICAgICAgVGltZXN0YW1wOiB0aW1lU3RhbXAsXG5cbiAgICAgICAgICAgICAgLyogVGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwIHRoYXQncyByZWNvcmRpbmcgdGhlIGV2ZW50LiAqL1xuICAgICAgICAgICAgICBBcHBQYWNrYWdlTmFtZTogYXBwUGFja2FnZU5hbWUsXG5cbiAgICAgICAgICAgICAgLyogVGhlIHRpdGxlIG9mIHRoZSBhcHAgdGhhdCdzIHJlY29yZGluZyB0aGUgZXZlbnQuICovXG4gICAgICAgICAgICAgIEFwcFRpdGxlOiBhcHBUaXRsZVxuICAgICAgICAgICAgfSwgYXBwVmVyc2lvbkNvZGUgPyB7XG4gICAgICAgICAgICAgIEFwcFZlcnNpb25Db2RlOiBhcHBWZXJzaW9uQ29kZVxuICAgICAgICAgICAgfSA6IHt9KSwge30sIHtcbiAgICAgICAgICAgICAgLyogRXZlbnQgYXR0cmlidXRlcyAtIE9uZSBvciBtb3JlIGN1c3RvbSBhdHRyaWJ1dGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQuICovXG4gICAgICAgICAgICAgIEF0dHJpYnV0ZXM6IHByZXBhcmVkRGF0YS5hdHRyaWJ1dGVzLFxuXG4gICAgICAgICAgICAgIC8qIFRoZSB2ZXJzaW9uIG9mIHRoZSBTREsgdGhhdCdzIHJ1bm5pbmcgb24gdGhlIGNsaWVudCBkZXZpY2UuICovXG4gICAgICAgICAgICAgIC8vIENsaWVudFNka1ZlcnNpb246ICdTVFJJTkdfVkFMVUUnLFxuXG4gICAgICAgICAgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSBTREsgdGhhdCdzIGJlaW5nIHVzZWQgdG8gcmVjb3JkIHRoZSBldmVudC4gKi9cbiAgICAgICAgICAgICAgLy8gU2RrTmFtZTogJ1NUUklOR19WQUxVRScsXG5cbiAgICAgICAgICAgICAgLyogRXZlbnQgbWV0cmljcyAtIE9uZSBvciBtb3JlIGN1c3RvbSBtZXRyaWNzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQuICovXG4gICAgICAgICAgICAgIE1ldHJpY3M6IHByZXBhcmVkRGF0YS5tZXRyaWNzLFxuICAgICAgICAgICAgICBTZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgLyogU2Vzc2lvbklkIGlzIHJlcXVpcmVkICovXG4gICAgICAgICAgICAgICAgSWQ6IHNlc3Npb25JZCxcblxuICAgICAgICAgICAgICAgIC8qIFN0YXJ0VGltZXN0YW1wIGlzIHJlcXVpcmVkICovXG4gICAgICAgICAgICAgICAgU3RhcnRUaW1lc3RhbXA6IHNlc3Npb25TdGFydCAvLyBJU09TdHJpbmdcblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7IC8vIEFkZCBzZXNzaW9uIHN0b3AgcGFyYW1ldGVycy5cblxuICAgICAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gU0VTU0lPTl9TVE9QJDIpIHtcbiAgICAgICAgICAgICAgLy8gZXZlbnRQYXlsb2FkW2V2ZW50SWRdLlNlc3Npb24uRHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3ViU2Vzc2lvblN0YXJ0XG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdPbGQgRFVSQVRJT04nLCBEYXRlLm5vdygpIC0gc3ViU2Vzc2lvblN0YXJ0KVxuICAgICAgICAgICAgICBldmVudFBheWxvYWRbZXZlbnRJZF0uU2Vzc2lvbi5EdXJhdGlvbiA9IHNlc3Npb25EdXJhdGlvbjsgLy8gc2Vzc2lvbkRhdGEuZWxhcHNlZCB3YXMgc2xpZ2h0bHkgb2ZmXG5cbiAgICAgICAgICAgICAgZXZlbnRQYXlsb2FkW2V2ZW50SWRdLlNlc3Npb24uU3RvcFRpbWVzdGFtcCA9IHRpbWVTdGFtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCBldmVudFBheWxvYWQpO1xuXG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSk7XG4gIH0pKTtcbiAgcmV0dXJuIF9mb3JtYXRFdmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG52YXIgRU5EUE9JTlRfS0VZJDEgPSAnX19lbmRwb2ludCc7XG5mdW5jdGlvbiBnZXRTdG9yYWdlS2V5KGlkKSB7XG4gIHJldHVybiBcIlwiLmNvbmNhdChFTkRQT0lOVF9LRVkkMSwgXCIuXCIpLmNvbmNhdChpZCk7XG59XG5cbnZhciBFTkRQT0lOVF9LRVkgPSAnX19lbmRwb2ludCc7XG52YXIgbWlncmF0aW9uUmFuID0gZmFsc2U7XG5mdW5jdGlvbiBtZXJnZUVuZHBvaW50RGF0YSgpIHtcbiAgcmV0dXJuIF9tZXJnZUVuZHBvaW50RGF0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfbWVyZ2VFbmRwb2ludERhdGEoKSB7XG4gIF9tZXJnZUVuZHBvaW50RGF0YSA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7XG4gICAgdmFyIGVuZHBvaW50LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGdldFVzZXJJZCxcbiAgICAgICAgZ2V0RW5kcG9pbnRJZCxcbiAgICAgICAgZW5kcG9pbnRNaWdyYXRpb24sXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHNlc3Npb25LZXksXG4gICAgICAgIHBhZ2VLZXksXG4gICAgICAgIHBhZ2VTZXNzaW9uSW5mbyxcbiAgICAgICAgcGFnZVNlc3Npb24sXG4gICAgICAgIGNsaWVudEluZm8sXG4gICAgICAgIHNlc3Npb25EYXRhLFxuICAgICAgICBpZCxcbiAgICAgICAgZGVwcmVjYXRlZERhdGEsXG4gICAgICAgIHBlcnNpc3RlZEVuZHBvaW50LFxuICAgICAgICBhcHBWZXJzaW9uU3RyaW5nLFxuICAgICAgICBkZW1vZ3JhcGhpY0luZm8sXG4gICAgICAgIEVuZHBvaW50RGF0YSxcbiAgICAgICAgZm91bmRJZCxcbiAgICAgICAgX2ZvdW5kSWQsXG4gICAgICAgIGhhc1ByZXZpb3VzU2Vzc2lvbixcbiAgICAgICAgX2FyZ3MgPSBhcmd1bWVudHM7XG5cbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgZW5kcG9pbnQgPSBfYXJncy5sZW5ndGggPiAwICYmIF9hcmdzWzBdICE9PSB1bmRlZmluZWQgPyBfYXJnc1swXSA6IHt9O1xuICAgICAgICAgICAgY29uZmlnID0gX2FyZ3MubGVuZ3RoID4gMSAmJiBfYXJnc1sxXSAhPT0gdW5kZWZpbmVkID8gX2FyZ3NbMV0gOiB7fTtcbiAgICAgICAgICAgIGdldFVzZXJJZCA9IGNvbmZpZy5nZXRVc2VySWQsIGdldEVuZHBvaW50SWQgPSBjb25maWcuZ2V0RW5kcG9pbnRJZCwgZW5kcG9pbnRNaWdyYXRpb24gPSBjb25maWcuZW5kcG9pbnRNaWdyYXRpb247XG4gICAgICAgICAgICBjb250ZXh0ID0gZ3JhYkNvbnRleHQoY29uZmlnKTtcbiAgICAgICAgICAgIHNlc3Npb25LZXkgPSBjb250ZXh0LnNlc3Npb25LZXkgPyBjb250ZXh0LnNlc3Npb25LZXkoKSA6ICdzZXNzaW9ucyc7XG4gICAgICAgICAgICBwYWdlS2V5ID0gY29udGV4dC5wYWdlVmlld0tleSA/IGNvbnRleHQucGFnZVZpZXdLZXkoKSA6ICdwYWdlVmlld3MnOyAvLyBjb25zdCB0YWJTZXNzaW9uSW5mbyA9IGdldFRhYlNlc3Npb24oKVxuXG4gICAgICAgICAgICBpZiAoaXNCcm93c2VyKSB7XG4gICAgICAgICAgICAgIGNsaWVudEluZm8gPSBicm93c2VyQ2xpZW50SW5mbygpO1xuICAgICAgICAgICAgICBwYWdlU2Vzc2lvbkluZm8gPSBnZXRQYWdlU2Vzc2lvbigpO1xuICAgICAgICAgICAgICBwYWdlU2Vzc2lvbiA9IHBhZ2VTZXNzaW9uSW5mby5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2Vzc2lvbkRhdGEgPSBnZXRTZXNzaW9uKCk7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTA7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RW5kcG9pbnRJZCgpO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGlkID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgLy8gQFRPRE8gcmVtb3ZlIGluIG5leHQgdmVyc2lvblxuICAgICAgICAgICAgaWYgKCFtaWdyYXRpb25SYW4pIHtcbiAgICAgICAgICAgICAgbWlncmF0aW9uUmFuID0gdHJ1ZTsgLy8gQmFja3dhcmRzIGNvbXBhdGlibGUgZW5kcG9pbnQgaW5mb1xuXG4gICAgICAgICAgICAgIGRlcHJlY2F0ZWREYXRhID0gZ2V0SXRlbShFTkRQT0lOVF9LRVkpOyAvLyBjbGVhciBvdXQgb2xkIGtleSB2YWx1ZVxuXG4gICAgICAgICAgICAgIGlmIChkZXByZWNhdGVkRGF0YSkge1xuICAgICAgICAgICAgICAgIHBlcnNpc3RFbmRwb2ludChpZCwgZGVwcmVjYXRlZERhdGEpOyAvLyByZW1vdmUgb2xkIGtleVxuXG4gICAgICAgICAgICAgICAgcmVtb3ZlSXRlbShFTkRQT0lOVF9LRVkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlcnNpc3RlZEVuZHBvaW50ID0gZ2V0RW5kcG9pbnQkMShpZCk7IC8vIGNvbnN0IGJyb3dzZXJWZXJzaW9uID0gW2NsaWVudEluZm8ubW9kZWwsIGNsaWVudEluZm8udmVyc2lvbl0uam9pbignLycpXG5cbiAgICAgICAgICAgIGFwcFZlcnNpb25TdHJpbmcgPSBnZXRBcHBWZXJzaW9uQ29kZShjb25maWcpO1xuICAgICAgICAgICAgZGVtb2dyYXBoaWNJbmZvID0gZ2V0RGVtb2dyYXBoaWNJbmZvKGFwcFZlcnNpb25TdHJpbmcsIGNsaWVudEluZm8pOyAvLyBjb25zb2xlLmxvZygnZGVtb2dyYXBoaWNJbmZvJywgZGVtb2dyYXBoaWNJbmZvKVxuXG4gICAgICAgICAgICBFbmRwb2ludERhdGEgPSB7XG4gICAgICAgICAgICAgIEF0dHJpYnV0ZXM6IHt9LFxuICAgICAgICAgICAgICBEZW1vZ3JhcGhpYzogZGVtb2dyYXBoaWNJbmZvLFxuICAgICAgICAgICAgICBMb2NhdGlvbjoge1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgQ2l0eTogJ1NUUklOR19WQUxVRScsXG4gICAgICAgICAgICAgICAgQ291bnRyeTogJ1NUUklOR19WQUxVRScsXG4gICAgICAgICAgICAgICAgTGF0aXR1ZGU6ICdOVU1CRVJfVkFMVUUnLFxuICAgICAgICAgICAgICAgIExvbmdpdHVkZTogJ05VTUJFUl9WQUxVRScsXG4gICAgICAgICAgICAgICAgUG9zdGFsQ29kZTogJ1NUUklOR19WQUxVRScsXG4gICAgICAgICAgICAgICAgUmVnaW9uOiAnU1RSSU5HX1ZBTFVFJ1xuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIE1ldHJpY3M6IHsvLyBbYCR7c2Vzc2lvbktleX1Vbml4YF06IHNlc3Npb25EYXRhLlVuaXhcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgYSB1c2VyIGhhcyBvcHRlZCBvdXQgb2YgcmVjZWl2aW5nIG1lc3NhZ2VzIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuICAgICAgICAgICAgICAgKiBBTEwgLSBVc2VyIGhhcyBvcHRlZCBvdXQgb2YgYWxsIG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgKiBOT05FIC0gVXNlcnMgaGFzIG5vdCBvcHRlZCBvdXQgYW5kIHJlY2VpdmVzIGFsbCBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIC8vIE9wdE91dDogJ1NUUklOR19WQUxVRScsXG5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvKiBBZGQgZGV2aWNlIGF0dHJpYnV0ZXMgdG8gZW5kcG9pbnQgKi9cblxuICAgICAgICAgICAgaWYgKGlzQnJvd3Nlcikge1xuICAgICAgICAgICAgICBpZiAoY2xpZW50SW5mby5kZXZpY2UgJiYgY2xpZW50SW5mby5kZXZpY2UudmVuZG9yKSB7XG4gICAgICAgICAgICAgICAgRW5kcG9pbnREYXRhLkF0dHJpYnV0ZXMuRGV2aWNlTWFrZSA9IFtjbGllbnRJbmZvLmRldmljZS52ZW5kb3JdO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNsaWVudEluZm8uZGV2aWNlICYmIGNsaWVudEluZm8uZGV2aWNlLm1vZGVsKSB7XG4gICAgICAgICAgICAgICAgRW5kcG9pbnREYXRhLkF0dHJpYnV0ZXMuRGV2aWNlTW9kZWwgPSBbY2xpZW50SW5mby5kZXZpY2UubW9kZWxdO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNsaWVudEluZm8uZGV2aWNlICYmIGNsaWVudEluZm8uZGV2aWNlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBFbmRwb2ludERhdGEuQXR0cmlidXRlcy5EZXZpY2VUeXBlID0gW2NsaWVudEluZm8uZGV2aWNlLnR5cGVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgIGlmIChlbmRwb2ludC5jaGFubmVsVHlwZSAmJiBjbGllbnRJbmZvLm9zLnZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBFbmRwb2ludERhdGEuQ2hhbm5lbFR5cGUgPSBlbmRwb2ludC5jaGFubmVsVHlwZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIE1lcmdlIG5ldyBlbmRwb2ludCBkYXRhIHdpdGggZGVmYXVsdHMuICovXG5cblxuICAgICAgICAgICAgZW5kcG9pbnQgPSBkZWVwbWVyZ2UuYWxsKFtwZXJzaXN0ZWRFbmRwb2ludCwgRW5kcG9pbnREYXRhLCBlbmRwb2ludF0sIHtcbiAgICAgICAgICAgICAgYXJyYXlNZXJnZTogb3ZlcndyaXRlTWVyZ2UgLy8gVE9ETyBtYXliZSBjaGFuZ2UgYXJyYXkgbWVyZ2VcblxuICAgICAgICAgICAgfSk7IC8vIFN5bmMgdXNlciBJRCBpZiBpdCdzIGNoYW5nZWRcblxuICAgICAgICAgICAgaWYgKCEoZW5kcG9pbnQuVXNlciAmJiBlbmRwb2ludC5Vc2VyLlVzZXJJZCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDIzO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDIxO1xuICAgICAgICAgICAgcmV0dXJuIGdldFVzZXJJZCgpO1xuXG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIGZvdW5kSWQgPSBfY29udGV4dC5zZW50O1xuXG4gICAgICAgICAgICBpZiAoZW5kcG9pbnQuVXNlci5Vc2VySWQgIT09IGZvdW5kSWQpIHtcbiAgICAgICAgICAgICAgZW5kcG9pbnQuVXNlci5Vc2VySWQgPSBmb3VuZElkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIGlmICghKCFlbmRwb2ludC5Vc2VyIHx8ICFlbmRwb2ludC5Vc2VyLlVzZXJJZCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI4O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI2O1xuICAgICAgICAgICAgcmV0dXJuIGdldFVzZXJJZCgpO1xuXG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgIF9mb3VuZElkID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgaWYgKF9mb3VuZElkKSB7XG4gICAgICAgICAgICAgIGVuZHBvaW50LlVzZXIgPSBlbmRwb2ludC5Vc2VyIHx8IHt9O1xuICAgICAgICAgICAgICBlbmRwb2ludC5Vc2VyLlVzZXJJZCA9IF9mb3VuZElkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIGlmICghKGVuZHBvaW50LlVzZXIgJiYgZW5kcG9pbnQuVXNlci5Vc2VyQXR0cmlidXRlcykpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDMyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDMxO1xuICAgICAgICAgICAgcmV0dXJuIHByZXBhcmVBdHRyaWJ1dGVzKGVuZHBvaW50LlVzZXIuVXNlckF0dHJpYnV0ZXMsIHRydWUpO1xuXG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIGVuZHBvaW50LlVzZXIuVXNlckF0dHJpYnV0ZXMgPSBfY29udGV4dC5zZW50O1xuXG4gICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzNDtcbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlQXR0cmlidXRlcyhlbmRwb2ludC5BdHRyaWJ1dGVzLCB0cnVlKTtcblxuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICBlbmRwb2ludC5BdHRyaWJ1dGVzID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzNztcbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlTWV0cmljcyhlbmRwb2ludC5NZXRyaWNzKTtcblxuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICBlbmRwb2ludC5NZXRyaWNzID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2VuZHBvaW50Lk1ldHJpY3MnLCBlbmRwb2ludC5NZXRyaWNzKVxuXG4gICAgICAgICAgICAvKiBTZXQgaW5pdGlhbCBzZXNzaW9uIGNvdW50ICovXG4gICAgICAgICAgICBpZiAoIWVuZHBvaW50Lk1ldHJpY3Nbc2Vzc2lvbktleV0pIHtcbiAgICAgICAgICAgICAgZW5kcG9pbnQuTWV0cmljc1tzZXNzaW9uS2V5XSA9IDEuMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIFNldCBpbml0aWFsIHBhZ2UgdmlldyBjb3VudCAqL1xuXG5cbiAgICAgICAgICAgIGlmICghZW5kcG9pbnQuTWV0cmljc1twYWdlS2V5XSkge1xuICAgICAgICAgICAgICBlbmRwb2ludC5NZXRyaWNzW3BhZ2VLZXldID0gMS4wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogQ3VzdG9tIGRhdGEgbWlncmF0aW9uIGZ1bmN0aW9uICovXG5cblxuICAgICAgICAgICAgaWYgKGVuZHBvaW50TWlncmF0aW9uKSB7XG4gICAgICAgICAgICAgIGVuZHBvaW50ID0gZW5kcG9pbnRNaWdyYXRpb24oaWQsIGVuZHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIElmIHRoaXMgaXMgZmlyc3Qgc2Vzc2lvbiwgc2V0IHZhbHVlcyBhbmQgcmV0dXJuICovXG5cblxuICAgICAgICAgICAgaGFzUHJldmlvdXNTZXNzaW9uID0gZW5kcG9pbnQuQXR0cmlidXRlcy5sYXN0U2Vzc2lvbjtcblxuICAgICAgICAgICAgaWYgKGhhc1ByZXZpb3VzU2Vzc2lvbikge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNDc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbmRwb2ludC5BdHRyaWJ1dGVzLmxhc3RTZXNzaW9uRGF0ZSA9IFtzZXNzaW9uRGF0YS5jcmVhdGVkQXRdO1xuICAgICAgICAgICAgZW5kcG9pbnQuQXR0cmlidXRlcy5sYXN0U2Vzc2lvbiA9IFtzZXNzaW9uRGF0YS5pZF07IC8vIEBUT0RPIHBlcnNpc3QgdGFiIGluZm9cbiAgICAgICAgICAgIC8vIGVuZHBvaW50LkF0dHJpYnV0ZXMubGFzdFRhYlNlc3Npb24gPSBbIHRhYlNlc3Npb25JbmZvLmlkIF1cblxuICAgICAgICAgICAgaWYgKHBhZ2VTZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGVuZHBvaW50LkF0dHJpYnV0ZXMubGFzdFBhZ2VTZXNzaW9uID0gW3BhZ2VTZXNzaW9uXTtcbiAgICAgICAgICAgIH0gLy8gU3RvcmUgdGhlIGVuZHBvaW50IGRhdGEuXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnU2V0IGluaXRpdGFsIGVuZHBvaW50IGluZm8nKVxuXG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgcGVyc2lzdEVuZHBvaW50KGlkLCBlbmRwb2ludCkpO1xuXG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIC8qIElmIGN1cnJlbnQgc2Vzc2lvbklkIGlzIGRpZmZlcmVudCB0aGFuIGxhc3RTZXNzaW9uICovXG4gICAgICAgICAgICBpZiAoaGFzUHJldmlvdXNTZXNzaW9uICYmIGhhc1ByZXZpb3VzU2Vzc2lvblswXSAhPT0gc2Vzc2lvbkRhdGEuaWQpIHtcbiAgICAgICAgICAgICAgZW5kcG9pbnQuQXR0cmlidXRlcy5sYXN0U2Vzc2lvbkRhdGUgPSBbc2Vzc2lvbkRhdGEuY3JlYXRlZEF0XTtcbiAgICAgICAgICAgICAgZW5kcG9pbnQuQXR0cmlidXRlcy5sYXN0U2Vzc2lvbiA9IFtzZXNzaW9uRGF0YS5pZF07XG4gICAgICAgICAgICAgIGVuZHBvaW50Lk1ldHJpY3Nbc2Vzc2lvbktleV0gKz0gMS4wOyAvLyBjb25zb2xlLmxvZygnVXBkYXRlIGxhc3RTZXNzaW9uIGluZm8nLCBzZXNzaW9uRGF0YS5pZClcbiAgICAgICAgICAgIH0gLy8gSW5jcmVtZW50IHBhZ2VWaWV3cy5cblxuXG4gICAgICAgICAgICBpZiAoZW5kcG9pbnQuQXR0cmlidXRlcyAmJiBlbmRwb2ludC5BdHRyaWJ1dGVzLmxhc3RQYWdlU2Vzc2lvbiAmJiBBcnJheS5pc0FycmF5KGVuZHBvaW50LkF0dHJpYnV0ZXMubGFzdFBhZ2VTZXNzaW9uKSAmJiBlbmRwb2ludC5BdHRyaWJ1dGVzLmxhc3RQYWdlU2Vzc2lvbi5sZW5ndGggPiAwICYmIGVuZHBvaW50LkF0dHJpYnV0ZXMubGFzdFBhZ2VTZXNzaW9uWzBdICE9PSBwYWdlU2Vzc2lvbikge1xuICAgICAgICAgICAgICBlbmRwb2ludC5BdHRyaWJ1dGVzLmxhc3RQYWdlU2Vzc2lvbiA9IFtwYWdlU2Vzc2lvbl07XG4gICAgICAgICAgICAgIGVuZHBvaW50Lk1ldHJpY3NbcGFnZUtleV0gKz0gMS4wOyAvLyBjb25zb2xlLmxvZygnVXBkYXRlIGxhc3RQYWdlU2Vzc2lvbiBpbmZvJywgcGFnZVNlc3Npb24pXG4gICAgICAgICAgICB9IC8vIFN0b3JlIHRoZSBlbmRwb2ludCBkYXRhLlxuXG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgcGVyc2lzdEVuZHBvaW50KGlkLCBlbmRwb2ludCkpO1xuXG4gICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSk7XG4gIH0pKTtcbiAgcmV0dXJuIF9tZXJnZUVuZHBvaW50RGF0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBwZXJzaXN0RW5kcG9pbnQoaWQsIGVuZHBvaW50RGF0YSkge1xuICB2YXIgZW5kcG9pbnRLZXkgPSBnZXRTdG9yYWdlS2V5KGlkKTtcbiAgdmFyIGRhdGEgPSBpc1N0cmluZyhlbmRwb2ludERhdGEpID8gZW5kcG9pbnREYXRhIDogSlNPTi5zdHJpbmdpZnkoZW5kcG9pbnREYXRhKTtcbiAgc2V0SXRlbShlbmRwb2ludEtleSwgZGF0YSk7XG4gIHJldHVybiBlbmRwb2ludERhdGE7XG59XG5cbmZ1bmN0aW9uIGdldEVuZHBvaW50JDEoaWQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRJdGVtKGdldFN0b3JhZ2VLZXkoaWQpKSkgfHwge307XG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVtb2dyYXBoaWNJbmZvKGFwcFZlcnNpb25TdHJpbmcsIGNsaWVudEluZm8pIHtcbiAgcmV0dXJuIGlzQnJvd3NlciA/IGdldEJyb3dzZXJEZW1vZ3JhcGhpY0luZm8oYXBwVmVyc2lvblN0cmluZywgY2xpZW50SW5mbykgOiBnZXRTZXJ2ZXJEZW1vZ3JhcGhpY0luZm8oYXBwVmVyc2lvblN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIGdldFNlcnZlckRlbW9ncmFwaGljSW5mbyhhcHBWZXJzaW9uU3RyaW5nKSB7XG4gIHZhciBkZW1vZ3JhcGhpY0luZm8gPSB7XG4gICAgQXBwVmVyc2lvbjogYXBwVmVyc2lvblN0cmluZyxcbiAgICBNYWtlOiAnZ2VuZXJpYyBzZXJ2ZXInLFxuICAgIFBsYXRmb3JtOiAnTm9kZS5qcycsXG4gICAgUGxhdGZvcm1WZXJzaW9uOiBwcm9jZXNzLnZlcnNpb25cbiAgfTtcbiAgcmV0dXJuIGRlbW9ncmFwaGljSW5mbztcbn1cblxuZnVuY3Rpb24gZ2V0QnJvd3NlckRlbW9ncmFwaGljSW5mbyhhcHBWZXJzaW9uU3RyaW5nLCBjbGllbnRJbmZvKSB7XG4gIHZhciBkZW1vZ3JhcGhpY0luZm8gPSB7XG4gICAgLy8gQXBwVGl0bGUvMC4wLjAuIE1hcHMgdG8gYXBwbGljYXRpb24udmVyc2lvbl9uYW1lIGluIGtpbmVzaXMgc3RyZWFtXG4gICAgQXBwVmVyc2lvbjogYXBwVmVyc2lvblN0cmluZyxcblxuICAgIC8qIFRoZSBsb2NhbGUgb2YgdGhlIGVuZHBvaW50LCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDogXG4gICAgICAgdGhlIElTTyA2MzktMSBhbHBoYS0yIGNvZGUsIGZvbGxvd2VkIGJ5IGFuIHVuZGVyc2NvcmUgKF8pLCBcbiAgICAgICBmb2xsb3dlZCBieSBhbiBJU08gMzE2Ni0xIGFscGhhLTIgdmFsdWUuIFxuICAgICovXG4gICAgTG9jYWxlOiBjbGllbnRJbmZvLmxhbmd1YWdlLFxuICAgIC8vIE1ha2VyIC0gR29vZ2xlL01vemlsbGEvQXBwbGVcbiAgICBNYWtlOiBjbGllbnRJbmZvLm1ha2UsXG4gICAgLy8gTW9kZWwgLSBTYWZhcmkvQ2hyb21lL0JyYXZlL09wZXJhXG4gICAgTW9kZWw6IGNsaWVudEluZm8ubW9kZWwsXG4gICAgLy8gTW9kZWxWZXJzaW9uIC0gOTEuMC4wXG4gICAgTW9kZWxWZXJzaW9uOiBjbGllbnRJbmZvLnZlcnNpb24sXG4gICAgLy8gUGxhdGZvcm0gLSBvcyBuYW1lXG4gICAgUGxhdGZvcm06IGNsaWVudEluZm8ub3MubmFtZSB8fCBjbGllbnRJbmZvLnBsYXRmb3JtIC8vIFBsYXRmb3JtVmVyc2lvbjogYnJvd3NlclZlcnNpb24sXG4gICAgLy8gVGltZXpvbmU6ICdTVFJJTkdfVkFMVUUnXG5cbiAgfTtcblxuICBpZiAoY2xpZW50SW5mby5vcyAmJiBjbGllbnRJbmZvLm9zLnZlcnNpb24pIHtcbiAgICBkZW1vZ3JhcGhpY0luZm8uUGxhdGZvcm1WZXJzaW9uID0gY2xpZW50SW5mby5vcy52ZXJzaW9uO1xuICB9XG5cbiAgcmV0dXJuIGRlbW9ncmFwaGljSW5mbztcbn1cblxuZnVuY3Rpb24gZ2V0QXBwVmVyc2lvbkNvZGUoY29uZmlnKSB7XG4gIHZhciBhcHBOYW1lID0gY29uZmlnLmFwcFRpdGxlIHx8IGNvbmZpZy5hcHBQYWNrYWdlTmFtZSB8fCAnJztcbiAgdmFyIGFwcFZlcnNpb24gPSBjb25maWcuYXBwVmVyc2lvbkNvZGUgfHwgJzAuMC4wJztcbiAgcmV0dXJuIGFwcE5hbWUgPyBcIlwiLmNvbmNhdChhcHBOYW1lLCBcIkBcIikuY29uY2F0KGFwcFZlcnNpb24pIDogYXBwVmVyc2lvbjtcbn1cbi8qKlxuICogQXJyYXkgbWVyZ2UgZnVuY3Rpb24gZm9yIGRlZXBtZXJnZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkZXN0aW5hdGlvbkFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2VBcnJheVxuICovXG5cblxuZnVuY3Rpb24gb3ZlcndyaXRlTWVyZ2UoX2Rlc3RpbmF0aW9uQXJyYXksIHNvdXJjZUFycmF5KSB7XG4gIHJldHVybiBzb3VyY2VBcnJheTtcbn1cblxuZnVuY3Rpb24gZ3JhYkNvbnRleHQoX3JlZikge1xuICB2YXIgZ2V0Q29udGV4dCA9IF9yZWYuZ2V0Q29udGV4dDtcblxuICBpZiAodHlwZW9mIGdldENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2V0Q29udGV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIGdldENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50UXVldWUocXVldWUpIHtcbiAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcXVldWVFdmVudCA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoZXZlbnROYW1lKSB7XG4gICAgICB2YXIgZXZlbnREYXRhLFxuICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgIGZsdXNoLFxuICAgICAgICAgIGV2ZW50UGF5bG9hZCxcbiAgICAgICAgICBfYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGV2ZW50RGF0YSA9IF9hcmdzLmxlbmd0aCA+IDEgJiYgX2FyZ3NbMV0gIT09IHVuZGVmaW5lZCA/IF9hcmdzWzFdIDoge307XG4gICAgICAgICAgICAgIGVuZHBvaW50ID0gX2FyZ3MubGVuZ3RoID4gMiAmJiBfYXJnc1syXSAhPT0gdW5kZWZpbmVkID8gX2FyZ3NbMl0gOiB7fTtcbiAgICAgICAgICAgICAgZmx1c2ggPSBfYXJncy5sZW5ndGggPiAzICYmIF9hcmdzWzNdICE9PSB1bmRlZmluZWQgPyBfYXJnc1szXSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW4oZXZlbnREYXRhKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50RGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGZsdXNoID0gZXZlbnREYXRhO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhbihlbmRwb2ludCkpIHtcbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHt9O1xuICAgICAgICAgICAgICAgIGZsdXNoID0gZW5kcG9pbnQ7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNztcbiAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdEV2ZW50KGV2ZW50TmFtZSwgZXZlbnREYXRhLCBjb25maWcpO1xuXG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgIGV2ZW50UGF5bG9hZCA9IF9jb250ZXh0LnNlbnQ7XG5cbiAgICAgICAgICAgICAgaWYgKCEoT2JqZWN0LmVudHJpZXMoZW5kcG9pbnQpLmxlbmd0aCB8fCBldmVudE5hbWUgPT09IFBBR0VfVklFVykpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTE7XG4gICAgICAgICAgICAgIHJldHVybiBtZXJnZUVuZHBvaW50RGF0YShlbmRwb2ludCwgY29uZmlnKTtcblxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgZW5kcG9pbnQgPSBfY29udGV4dC5zZW50O1xuXG4gICAgICAgICAgICBjYXNlIDEyOlxuXG5cbiAgICAgICAgICAgICAgcXVldWUucHVzaChldmVudFBheWxvYWQpOyAvLyBJZiBjb25maWcgc2V0dGluZyB0byBzZW5kIGV2ZXJ5IGV2ZW50IGFzIGl0IGhhcHBlbnNcblxuICAgICAgICAgICAgICBpZiAoIWZsdXNoKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE3O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCBxdWV1ZS5mbHVzaCgpKTtcblxuICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIF9jYWxsZWUpO1xuICAgIH0pKTtcblxuICAgIGZ1bmN0aW9uIHF1ZXVlRXZlbnQoX3gpIHtcbiAgICAgIHJldHVybiBfcXVldWVFdmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWV1ZUV2ZW50O1xuICB9KCk7XG59XG5cbnZhciBBV1M7XG5cbnZhciBSRVRSWUFCTEVfQ09ERVMgPSBbNDI5LCA1MDBdO1xudmFyIEFDQ0VQVEVEX0NPREVTID0gWzIwMl07XG52YXIgQkFEX1JFUVVFU1RfQ09ERSA9IDQwMDtcbmZ1bmN0aW9uIGNhbGxBd3MoX3gsIF94Mikge1xuICByZXR1cm4gX2NhbGxBd3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2NhbGxBd3MoKSB7XG4gIF9jYWxsQXdzID0gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gX2NhbGxlZShldmVudHNSZXF1ZXN0LCBjb25maWcpIHtcbiAgICB2YXIgcGlucG9pbnRSZWdpb24sIHBpbnBvaW50QXBwSWQsIGxhbWJkYUFybiwgbGFtYmRhUmVnaW9uLCBjcmVkZW50aWFscywgZ2V0Q3JlZGVudGlhbHMsIGRlYnVnLCBhdXRoLCBsYW1iZGFfcmVnaW9uLCBwaW5wb2ludF9yZWdpb24sIGZpcHMsIExBTUJEQV9GTiwgUElOUE9JTlRfVVJMLCBlbmRwb2ludFVybCwgYXdzLCBkYXRhLCBwYXlsb2FkLCBjb21tYW5kLCByZXNwb25zZXM7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHBpbnBvaW50UmVnaW9uID0gY29uZmlnLnBpbnBvaW50UmVnaW9uLCBwaW5wb2ludEFwcElkID0gY29uZmlnLnBpbnBvaW50QXBwSWQsIGxhbWJkYUFybiA9IGNvbmZpZy5sYW1iZGFBcm4sIGxhbWJkYVJlZ2lvbiA9IGNvbmZpZy5sYW1iZGFSZWdpb24sIGNyZWRlbnRpYWxzID0gY29uZmlnLmNyZWRlbnRpYWxzLCBnZXRDcmVkZW50aWFscyA9IGNvbmZpZy5nZXRDcmVkZW50aWFscywgZGVidWcgPSBjb25maWcuZGVidWc7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMztcbiAgICAgICAgICAgIHJldHVybiBnZXRBdXRoKGNyZWRlbnRpYWxzLCBnZXRDcmVkZW50aWFscyk7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBhdXRoID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwaW5wb2ludCBhdXRoJywgYXV0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhbWJkYV9yZWdpb24gPSBsYW1iZGFSZWdpb24gfHwgcGlucG9pbnRSZWdpb247XG4gICAgICAgICAgICBwaW5wb2ludF9yZWdpb24gPSBwaW5wb2ludFJlZ2lvbiB8fCBsYW1iZGFSZWdpb247XG4gICAgICAgICAgICBmaXBzID0gY29uZmlnLmZpcHMgPT09IHRydWUgPyAnLWZpcHMnIDogJyc7XG4gICAgICAgICAgICBMQU1CREFfRk4gPSBcImh0dHBzOi8vbGFtYmRhLlwiLmNvbmNhdChsYW1iZGFfcmVnaW9uLCBcIi5hbWF6b25hd3MuY29tLzIwMTUtMDMtMzEvZnVuY3Rpb25zL1wiKS5jb25jYXQobGFtYmRhQXJuLCBcIi9pbnZvY2F0aW9uc1wiKTtcbiAgICAgICAgICAgIFBJTlBPSU5UX1VSTCA9IFwiaHR0cHM6Ly9waW5wb2ludFwiLmNvbmNhdChmaXBzLCBcIi5cIikuY29uY2F0KHBpbnBvaW50X3JlZ2lvbiwgXCIuYW1hem9uYXdzLmNvbS92MS9hcHBzL1wiKS5jb25jYXQocGlucG9pbnRBcHBJZCwgXCIvZXZlbnRzXCIpO1xuICAgICAgICAgICAgZW5kcG9pbnRVcmwgPSBsYW1iZGFBcm4gPyBMQU1CREFfRk4gOiBQSU5QT0lOVF9VUkw7XG4gICAgICAgICAgICAvKiBAVE9ETyBnZXQgYmVhY29uIHdvcmtpbmcgd2l0aCBBUEkgZ2F0ZXdheS9sYW1iZGEvcGlucG9pbnQgbGVnYWN5IGVuZHBvaW50XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZXN0QmVhY29uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbmRCZWFjb25SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBhdXRoLFxuICAgICAgICAgICAgICAgICAgcmVnaW9uOiBwaW5wb2ludF9yZWdpb24sXG4gICAgICAgICAgICAgICAgICBwaW5wb2ludEFwcElkOiBwaW5wb2ludEFwcElkLFxuICAgICAgICAgICAgICAgICAgZXZlbnRzUmVxdWVzdDogZXZlbnRzUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgIC8vIHVybDogYGh0dHBzOi8vcGlucG9pbnQuJHtyZWdpb259LmFtYXpvbmF3cy5jb20vdjEvYXBwcy8ke3BpbnBvaW50QXBwSWR9L2V2ZW50cy9sZWdhY3lgO1xuICAgICAgICAgICAgICAgICAgdXJsOiBMQU1CREFfRk5cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aW5kb3cudGVzdEJlYWNvbiA9IHRlc3RCZWFjb25cbiAgICAgICAgICAgIC8qKi9cblxuICAgICAgICAgICAgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZXZlbnRzUmVxdWVzdClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGF3cyA9IG5ldyBBd3NDbGllbnQoYXV0aCk7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTY7XG4gICAgICAgICAgICByZXR1cm4gYXdzLmZldGNoKGVuZHBvaW50VXJsLCBwYXlsb2FkKS50aGVuKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkLmpzb24oKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIGRhdGEgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI0O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgYXdzID0gbmV3IEFXUy5QaW5wb2ludENsaWVudCh7XG4gICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBhdXRoLFxuICAgICAgICAgICAgICByZWdpb246IHBpbnBvaW50UmVnaW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBuZXcgQVdTLlB1dEV2ZW50c0NvbW1hbmQoe1xuICAgICAgICAgICAgICBBcHBsaWNhdGlvbklkOiBwaW5wb2ludEFwcElkLFxuICAgICAgICAgICAgICBFdmVudHNSZXF1ZXN0OiBldmVudHNSZXF1ZXN0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyMztcbiAgICAgICAgICAgIHJldHVybiBhd3Muc2VuZChjb21tYW5kKTtcblxuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICBkYXRhID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLlJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgLy8gUHJvY2VzcyBhcGkgcmVzcG9uc2VzXG4gICAgICAgICAgICAgIHJlc3BvbnNlcyA9IE9iamVjdC5rZXlzKGRhdGEuUmVzdWx0cykubWFwKGZ1bmN0aW9uIChldmVudElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuUmVzdWx0c1tldmVudElkXTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIC8qIE1lc3NhZ2U6IFwiU2Vzc2lvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgbXVzdCBiZSBlcXVhbCB0byB0aGUgZGlmZmVyZW5jZSBvZiBzdGFydCBhbmQgc3RvcCB0aW1lc3RhbXBcIlxuICAgICAgICAgICAgICBTdGF0dXNDb2RlOiA0MDBcbiAgICAgICAgICAgICAgU2Vzc2lvbjoge0lkOiBcImMwMjRlYWU4LTQ5NzgtNGQyYi04OThkLTMxYjg5ZGRkNjJkM1wiLCBTdGFydFRpbWVzdGFtcDogXCIyMDIxLTA1LTI1VDA2OjA5OjMwLjYzMlpcIiwgRHVyYXRpb246IDIwMDA4LCBTdG9wVGltZXN0YW1wOiBcIjIwMjEtMDUtMjVUMDY6MDk6NTAuNjQxWlwifVxuICAgICAgICAgICAgICAvLyBuZXcgRGF0ZSgnMjAyMS0wNS0yNVQwNjowOTo1MC42NDFaJykuZ2V0VGltZSgpIC0gbmV3IERhdGUoJzIwMjEtMDUtMjVUMDY6MDk6MzAuNjMyWicpLmdldFRpbWUoKSA9PT0gMjAwMDkgKi9cblxuICAgICAgICAgICAgICByZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICAgICAgICAgIHZhciBFbmRwb2ludEl0ZW1SZXNwb25zZSA9IHJlc3AuRW5kcG9pbnRJdGVtUmVzcG9uc2UgfHwge307XG4gICAgICAgICAgICAgICAgdmFyIEV2ZW50c0l0ZW1SZXNwb25zZSA9IHJlc3AuRXZlbnRzSXRlbVJlc3BvbnNlIHx8IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKEVuZHBvaW50SXRlbVJlc3BvbnNlKS5sZW5ndGgpIHtcblxuICAgICAgICAgICAgICAgICAgaWYgKEFDQ0VQVEVEX0NPREVTLmluY2x1ZGVzKEVuZHBvaW50SXRlbVJlc3BvbnNlLlN0YXR1c0NvZGUpKSA7IGVsc2UgaWYgKFJFVFJZQUJMRV9DT0RFUy5pbmNsdWRlcyhFbmRwb2ludEl0ZW1SZXNwb25zZS5TdGF0dXNDb2RlKSkgOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGhhbmRsZSBlcnJvclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVFbmRwb2ludFVwZGF0ZUJhZFJlcXVlc3QoRW5kcG9pbnRJdGVtUmVzcG9uc2UsIEVuZHBvaW50KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZXZlbnRzID0gT2JqZWN0LmtleXMoRXZlbnRzSXRlbVJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgIGlmIChldmVudHMubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudElkKSB7Ly8gQFRPRE8gaGFuZGxlIDQwMCBlcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYFtyZXEgXCIke0VuZHBvaW50LlJlcXVlc3RJZH1cIl0gRXZlbnQgaWQgJHtldmVudElkfWAsIEV2ZW50c0l0ZW1SZXNwb25zZVtldmVudElkXSlcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgZGF0YSk7XG5cbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlKTtcbiAgfSkpO1xuICByZXR1cm4gX2NhbGxBd3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXV0aChfeDMsIF94NCkge1xuICByZXR1cm4gX2dldEF1dGguYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2dldEF1dGgoKSB7XG4gIF9nZXRBdXRoID0gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoY3JlZGVudGlhbHMsIGdldENyZWRlbnRpYWxzKSB7XG4gICAgdmFyIGNyZWRzLCBhdXRoO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY3JlZHMgPSBjcmVkZW50aWFscztcbiAgICAgICAgICAgIC8qIFVzZSBjdXN0b20gY3JlZHMgZnVuY3Rpb24gKi9cblxuICAgICAgICAgICAgaWYgKCEoIU9iamVjdC5rZXlzKGNyZWRzKS5sZW5ndGggJiYgZ2V0Q3JlZGVudGlhbHMpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDIucHJldiA9IDI7XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDU7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbHMoKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGNyZWRzID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDExO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBfY29udGV4dDIucHJldiA9IDg7XG4gICAgICAgICAgICBfY29udGV4dDIudDAgPSBfY29udGV4dDJbXCJjYXRjaFwiXSgyKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfY29udGV4dDIudDApO1xuXG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIGF1dGggPSB7XG4gICAgICAgICAgICAgIC8vIFN1cHBvcnQgYW1wbGlmeSBhbmQgcmF3IGNsaWVudCBhdXRoIHBhcmFtc1xuICAgICAgICAgICAgICBhY2Nlc3NLZXlJZDogY3JlZHMuYWNjZXNzS2V5SWQgfHwgY3JlZHMuQWNjZXNzS2V5SWQsXG4gICAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleTogY3JlZHMuc2VjcmV0QWNjZXNzS2V5IHx8IGNyZWRzLlNlY3JldEtleSxcbiAgICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBjcmVkcy5zZXNzaW9uVG9rZW4gfHwgY3JlZHMuU2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgICByZXRyaWVzOiA1XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwgYXV0aCk7XG5cbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTIsIG51bGwsIFtbMiwgOF1dKTtcbiAgfSkpO1xuICByZXR1cm4gX2dldEF1dGguYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlRW5kcG9pbnRVcGRhdGVCYWRSZXF1ZXN0KGVycm9yLCBlbmRwb2ludCkge1xuICB2YXIgU3RhdHVzQ29kZSA9IGVycm9yLlN0YXR1c0NvZGUsXG4gICAgICBNZXNzYWdlID0gZXJyb3IuTWVzc2FnZTsgLy8gY29uc29sZS5sb2coJ21lc3NhZ2UnLCBNZXNzYWdlKVxuXG4gIGlmIChTdGF0dXNDb2RlID09PSBCQURfUkVRVUVTVF9DT0RFKSB7XG4gICAgLy8gNDAwXG4gICAgaWYgKE1lc3NhZ2Uuc3RhcnRzV2l0aCgnTWlzc2luZyBDaGFubmVsVHlwZScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQ2hhbm5lbFR5cGUnKTtcbiAgICB9XG5cbiAgICBpZiAoTWVzc2FnZS5zdGFydHNXaXRoKCdFeGNlZWRlZCBtYXhpbXVtIGVuZHBvaW50IHBlciB1c2VyIGNvdW50JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhjZWVkZWQgbWF4aW11bSBlbmRwb2ludCBwZXIgdXNlciBjb3VudCcpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgQUxMT1dFRF9DSEFOTkVMUyA9IFsnUFVTSCcsICdHQ00nLCAnQVBOUycsICdBUE5TX1NBTkRCT1gnLCAnQVBOU19WT0lQJywgJ0FQTlNfVk9JUF9TQU5EQk9YJywgJ0FETScsICdTTVMnLCAnVk9JQ0UnLCAnRU1BSUwnLCAnQkFJRFUnLCAnQ1VTVE9NJyAvLyAnSU5fQVBQJyB3aGF0IGlzIHRoaXM/XG5dO1xudmFyIENIQU5ORUxfVFlQRVMgPSBBTExPV0VEX0NIQU5ORUxTLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjdXJyKSB7XG4gIGFjY1tjdXJyXSA9IGN1cnI7XG4gIHJldHVybiBhY2M7XG59LCB7fSk7XG5cbnZhciBjbGllbnRJbmZvID0gYnJvd3NlckNsaWVudEluZm8oKTtcbnZhciBTRVNTSU9OX1NUQVJUID0gU0VTU0lPTl9TVEFSVCQxLFxuICAgIFNFU1NJT05fU1RPUCQxID0gU0VTU0lPTl9TVE9QJDI7XG52YXIgRU1BSUxfUkVHRVggPSAvLitcXEAuK1xcLi4rLztcblxuZnVuY3Rpb24gaXNFbWFpbChzdHJpbmcpIHtcbiAgcmV0dXJuIEVNQUlMX1JFR0VYLnRlc3Qoc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGlucG9pbnRTZW5kZXIoKSB7XG4gIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgZ2V0RW5kcG9pbnRJZCA9IGNvbmZpZy5nZXRFbmRwb2ludElkLFxuICAgICAgZGVidWcgPSBjb25maWcuZGVidWc7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcGlucG9pbnRQdXRFdmVudCA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7XG4gICAgICB2YXIgZXZlbnRzQXJyYXksXG4gICAgICAgICAgZW5kcG9pbnRJbmZvLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGhhc0VuZHBvaW50LFxuICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgIGNoYW5uZWxUeXBlLFxuICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICBldmVudHNSZXF1ZXN0LFxuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIF9hcmdzID0gYXJndW1lbnRzO1xuICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgZXZlbnRzQXJyYXkgPSBfYXJncy5sZW5ndGggPiAwICYmIF9hcmdzWzBdICE9PSB1bmRlZmluZWQgPyBfYXJnc1swXSA6IFtdO1xuICAgICAgICAgICAgICBlbmRwb2ludEluZm8gPSBfYXJncy5sZW5ndGggPiAxICYmIF9hcmdzWzFdICE9PSB1bmRlZmluZWQgPyBfYXJnc1sxXSA6IHt9O1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVuZHBvaW50SWQoKTtcblxuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICBpZCA9IF9jb250ZXh0LnNlbnQ7XG5cbiAgICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBlbmRwb2ludCBpZC4gY2hlY2sgZ2V0RW5kcG9pbnRJZCgpJyk7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIik7XG5cbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgaGFzRW5kcG9pbnQgPSBfdHlwZW9mKGVuZHBvaW50SW5mbykgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGVuZHBvaW50SW5mbykubGVuZ3RoO1xuXG4gICAgICAgICAgICAgIGlmIChoYXNFbmRwb2ludCkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9jb250ZXh0LnQwID0gZ2V0RW5kcG9pbnQoaWQpO1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTU7XG4gICAgICAgICAgICAgIHJldHVybiBtZXJnZUVuZHBvaW50RGF0YShlbmRwb2ludEluZm8sIGNvbmZpZyk7XG5cbiAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgIF9jb250ZXh0LnQwID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgZW5kcG9pbnQgPSBfY29udGV4dC50MDtcbiAgICAgICAgICAgICAgY2hhbm5lbFR5cGUgPSBlbmRwb2ludC5DaGFubmVsVHlwZTsgLy8gSWYgZW1haWwgaXMgc2V0LCBzZXQgZW1haWwgY2hhbm5lbFxuXG4gICAgICAgICAgICAgIGlmIChlbmRwb2ludC5BZGRyZXNzICYmIGlzRW1haWwoZW5kcG9pbnQuQWRkcmVzcykpIHtcbiAgICAgICAgICAgICAgICBjaGFubmVsVHlwZSA9IENIQU5ORUxfVFlQRVMuRU1BSUw7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIWNoYW5uZWxUeXBlICYmIGVuZHBvaW50LkFkZHJlc3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2xpZW50SW5mby5wbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICAgICAgICAgICAgICBjaGFubmVsVHlwZSA9IGNoYW5uZWxUeXBlIHx8IENIQU5ORUxfVFlQRVMuR0NNO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjaGFubmVsVHlwZSA9IGNoYW5uZWxUeXBlIHx8IENIQU5ORUxfVFlQRVMuQVBOUztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRW5kcG9pbnQnLCBlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NIQU5ORUxfVFlQRScsIGNoYW5uZWxUeXBlKTtcbiAgICAgICAgICAgICAgfSAvLyBCdWlsZCBlbmRwb2ludCBkYXRhLlxuXG5cbiAgICAgICAgICAgICAgZW5kcG9pbnQuUmVxdWVzdElkID0gdXVpZCgpO1xuICAgICAgICAgICAgICBlbmRwb2ludC5DaGFubmVsVHlwZSA9IGNoYW5uZWxUeXBlO1xuXG4gICAgICAgICAgICAgIGlmIChlbmRwb2ludC5BZGRyZXNzKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9hbXpuLnRvLzNiWUM1Z3BcbiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IE9wdE91dCBpcyBBTExcbiAgICAgICAgICAgICAgICAvLyBPcHRPdXQ6ICdOT05FJyxcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5PcHRPdXQgPSBlbmRwb2ludC5PcHRPdXQgfHwgJ05PTkUnO1xuICAgICAgICAgICAgICB9IC8vIGNvbnN0IGVuZHBvaW50SWQgPSBlbmRwb2ludElkLnJlcGxhY2UoYCR7Q09HTklUT19SRUdJT059OmAsICcnIClcbiAgICAgICAgICAgICAgLy8gQnVpbGQgZXZlbnRzIHJlcXVlc3Qgb2JqZWN0LlxuXG5cbiAgICAgICAgICAgICAgZXZlbnRzID0gc29ydEV2ZW50cyhldmVudHNBcnJheSk7XG4gICAgICAgICAgICAgIGV2ZW50c1JlcXVlc3QgPSBmb3JtYXRQaW5wb2ludEJvZHkoaWQsIGVuZHBvaW50LCBldmVudHMpOyAvLyBjb25zb2xlLmxvZygnTmV3IGV2ZW50c1JlcXVlc3QnLCBldmVudHNSZXF1ZXN0KVxuXG4gICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAyNjtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI5O1xuICAgICAgICAgICAgICByZXR1cm4gY2FsbEF3cyhldmVudHNSZXF1ZXN0LCBjb25maWcpO1xuXG4gICAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgICByZXNwb25zZSA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzNjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAzMjtcbiAgICAgICAgICAgICAgX2NvbnRleHQudDEgPSBfY29udGV4dFtcImNhdGNoXCJdKDI2KTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGNhbGxpbmcgQVdTJywgX2NvbnRleHQudDEpO1xuICAgICAgICAgICAgICBlcnJvciA9IF9jb250ZXh0LnQxO1xuXG4gICAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICBlbmRwb2ludDogZW5kcG9pbnQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICBldmVudHM6IGV2ZW50c0FycmF5XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgX2NhbGxlZSwgbnVsbCwgW1syNiwgMzJdXSk7XG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gcGlucG9pbnRQdXRFdmVudCgpIHtcbiAgICAgIHJldHVybiBfcGlucG9pbnRQdXRFdmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBwaW5wb2ludFB1dEV2ZW50O1xuICB9KCk7XG59XG5cbmZ1bmN0aW9uIGdldEVuZHBvaW50KGlkKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZ2V0SXRlbShnZXRTdG9yYWdlS2V5KGlkKSkpIHx8IHt9O1xuICB9IGNhdGNoIChlcnJvcikge31cblxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNvcnRFdmVudHMoZXZlbnRzKSB7XG4gIHJldHVybiBldmVudHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBldmVudEEgPSBhLkV2ZW50VHlwZTtcbiAgICB2YXIgZXZlbnRCID0gYi5FdmVudFR5cGU7IC8vIFNlbmQgU0VTU0lPTl9TVEFSVCB0byBmcm9udFxuXG4gICAgaWYgKGV2ZW50QSA9PSBTRVNTSU9OX1NUQVJUKSByZXR1cm4gLTE7XG4gICAgaWYgKGV2ZW50QiA9PSBTRVNTSU9OX1NUQVJUKSByZXR1cm4gMTsgLy8gU2VuZCBTRVNTSU9OX1NUT1AgdG8gYmFja1xuXG4gICAgaWYgKGV2ZW50QSA9PSBTRVNTSU9OX1NUT1AkMSkgcmV0dXJuIDE7XG4gICAgaWYgKGV2ZW50QiA9PSBTRVNTSU9OX1NUT1AkMSkgcmV0dXJuIC0xO1xuICAgIHJldHVybjtcbiAgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGV2ZW50KSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZXZlbnQpLCBhY2MpO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBpbnBvaW50Qm9keShlbmRwb2ludElkLCBlbmRwb2ludCwgZXZlbnRzKSB7XG4gIHJldHVybiB7XG4gICAgQmF0Y2hJdGVtOiBfZGVmaW5lUHJvcGVydHkoe30sIGVuZHBvaW50SWQsIHtcbiAgICAgIEVuZHBvaW50OiBlbmRwb2ludCxcbiAgICAgIEV2ZW50czogZXZlbnRzXG4gICAgfSlcbiAgfTtcbn1cblxudmFyIFNFU1NJT05fU1RPUCA9IFNFU1NJT05fU1RPUCQyO1xuXG5mdW5jdGlvbiBub09wKCkge1xuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gIC8vIEBUT0RPIGNsZWFuIHVwXG4gIHZhciBjb25maWd1cmF0aW9uID0gX29iamVjdFNwcmVhZCh7XG4gICAgZ2V0Q29udGV4dDogY29uZmlnLmdldENvbnRleHQgfHwgbm9PcCxcbiAgICBjcmVkZW50aWFsczogY29uZmlnLmNyZWRlbnRpYWxzIHx8IHt9LFxuICAgIGdldEVuZHBvaW50SWQ6IGNvbmZpZy5nZXRFbmRwb2ludElkXG4gIH0sIGNvbmZpZyk7XG5cbiAgdmFyIGxvZ2dlciA9IGNvbmZpZ3VyYXRpb24uZGVidWcgPyBjb25zb2xlLmxvZyA6IGZ1bmN0aW9uICgpIHt9OyAvLyBDcmVhdGUgZnVuY3Rpb24gdGhhdCBzZW5kcyB0byBwaW5wb2ludFxuXG4gIHZhciBwaW5wb2ludFB1dEV2ZW50ID0gY3JlYXRlUGlucG9pbnRTZW5kZXIoY29uZmlndXJhdGlvbik7XG4gIHZhciBxdWV1ZSA9IHNtYXJ0UXVldWUoIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYgPSBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlKGV2ZW50cywgcmVzdCkge1xuICAgICAgdmFyIHJlc3BvbnNlO1xuICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcignPiBRdWV1ZSBldmVudCcsIGV2ZW50KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzO1xuICAgICAgICAgICAgICByZXR1cm4gcGlucG9pbnRQdXRFdmVudChldmVudHMsIHt9KTtcblxuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXNwb25zZSA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICAgIGxvZ2dlcignPiBRdWV1ZSByZXNwb25zZScsIHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgX2NhbGxlZSk7XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfeCwgX3gyKSB7XG4gICAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH0oKSwge1xuICAgIG1heDogMTAsXG4gICAgLy8gbGltaXQuLi4gZXZlbnQgbGltaXQgaXMgMTAwIGZvciBwaW5wb2ludFxuICAgIGludGVydmFsOiBjb25maWcuZmx1c2hJbnRlcnZhbCB8fCAzMDAwLFxuICAgIC8vIDNzXG4gICAgdGhyb3R0bGU6IHRydWUgLy8gRW5zdXJlIG9ubHkgbWF4IGlzIHByb2Nlc3NlZCBhdCBpbnRlcnZhbFxuICAgIC8vIG9uUGF1c2U6IChxdWV1ZSkgPT4ge30sXG4gICAgLy8gb25FbXB0eTogKCkgPT4ge31cblxuICB9KTtcbiAgLyogQ3JlYXRlIGluc3RhbmNlIG9mIHJlY29yZEV2ZW50IHF1ZXVlICovXG5cbiAgdmFyIHF1ZXVlRXZlbnQgPSBjcmVhdGVFdmVudFF1ZXVlKHF1ZXVlLCBjb25maWd1cmF0aW9uKTtcbiAgLyogUnVuIGluaXRpYWxpemUgZW5kcG9pbnQgbWVyZ2UgKi9cblxuICBtZXJnZUVuZHBvaW50RGF0YSh7fSwgY29uZmlnKTsgLy8gRmx1c2ggcmVtYWluaW5nIGV2ZW50cyBvbiBwYWdlIGNsb3NlXG5cbiAgdmFyIGRldGFjaFVubG9hZExpc3RlbmVyID0gb25XaW5kb3dVbmxvYWQocXVldWVFdmVudCk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlRW5kcG9pbnQoZW5kcG9pbnQpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnQ2FsbCB1cGRhdGUgaW1tZWRpYXRlbHknKVxuICAgIHJldHVybiBwaW5wb2ludFB1dEV2ZW50KFtdLCBlbmRwb2ludCk7XG4gIH0gLy8gRnVuY3Rpb24gdG8gZGV0YWNoIGxpc3RlbmVyc1xuXG5cbiAgcmV0dXJuIHtcbiAgICB1cGRhdGVFbmRwb2ludDogdXBkYXRlRW5kcG9pbnQsXG4gICAgcmVjb3JkRXZlbnQ6IHF1ZXVlRXZlbnQsXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIGRldGFjaFVubG9hZExpc3RlbmVyKCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBvbldpbmRvd1VubG9hZChxdWV1ZUV2ZW50KSB7XG4gIGlmICghaXNCcm93c2VyKSB7XG4gICAgcmV0dXJuIG5vT3A7XG4gIH1cblxuICB2YXIgc3RvcFNlc3Npb25IYW5kbGVyID0gc3RvcFNlc3Npb25GYWN0b3J5KHF1ZXVlRXZlbnQpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgc3RvcFNlc3Npb25IYW5kbGVyKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHN0b3BTZXNzaW9uSGFuZGxlcik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0b3BTZXNzaW9uRmFjdG9yeShxdWV1ZUV2ZW50KSB7XG4gIC8vIEZsdXNoIHJlbWFpbmluZyBldmVudHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBxdWV1ZUV2ZW50KFNFU1NJT05fU1RPUCwgdHJ1ZSk7XG4gIH07XG59XG4vKiBAVE9ETyB3aXJlIHVwIGJlYWNvbiAqL1xuXG4vKiBtaW50cyBVUkwgbGlrZVxuaHR0cHM6Ly9waW5wb2ludC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS92MS9hcHBzL3VuZGVmaW5lZC9ldmVudHMvbGVnYWN5P1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QVNJQTVNSkNLVURFWjdMTk9HRVElMkYyMDIxMDYwMyUyRnVzLWVhc3QtMSUyRm1vYmlsZXRhcmdldGluZyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjEwNjAzVDA3MjQwMFomWC1BbXotU2VjdXJpdHktVG9rZW49SVFvSmIzSnBaMmx1WDJWakVFQWFDWFZ6TFdWaGMzUXRNU0pITUVVQ0lEWHFzUlVIWGNZTzdldlNBYkZuZHZyaVpMd3NqZ1dFMUs1ODlMczJWc2p3QWlFQXlyd1Y4TDlqNDRwU01ub1BUY3RZSTgyNFdWTVhxN3NsJTJCR2UlMkZ0ZXNmb05JcW1nWUk2ZiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRkFSQUFHZ3c1TVRrM016RTROekU1TkRVaURJYWhwZDZFejVsYjM4VHdnQ3J1QldNMExuZUFrZ3hQWHRiJTJCODhob1hxcE95ckxDV3R1TmlJQll5dnBtZllUYk9PJTJCdzhKam1IOUJWRGNWZGMyZHl2elU0aUZUNGVYMHRzUm5KektHenU2cGR5WXJHc2o1SDV2SmdOdzltdVNLQlhrRUV2OTVPQlRRSHNDMDlrV2F5QzRnTmRlVmJWemFTb253QXRXbG43Vk5UMVN2ZGhUOFVGQ21tN3hvQnUxbllkd0g0OUFGJTJGSE9DOFBMNjlzd0s0cEt6ZzNPUUY1aW9MJTJCNzAlMkZEMUhIVTUxSkQlMkJxNXZOc3VwRlpiZ1NxT2JvcHE1MlBNMUZFcyUyRmxuc25iQThKZEllMkl4WllLbHo2WTZrTDZldnozdDVZbEVSVGZJJTJGRzZqUkFhVHEwa2w3T3hReUNUcUNiNEpWZkZGRCUyQmpWa3NGY09UeWV6Z1BoQ2NBc1ZxVjBCUFZab2VpdiUyQnlzU2xTanNpS0tBVVdIdkg2R2VVRDVIdE9UMzA0JTJGJTJGMnZUNUkwMXRHMGpIdUFFJTJCQ3ZYNWhtMnhZTjRWRTlZRndGbUhURnhCY05FS1VqcmZsa21ybm90T1I1VFRXVzk1VkRtMk13VVIxWEV3OFB0dWY0cHIlMkJMVVhaOTNVZmlGRzhlZGJ1cGRDazcxSE5JZlplRTg1VE5uaCUyQjFCRHAwclZsOW0xNUpmMmpmJTJCbHFkZEV4cWY4MnduQWU5TUE4aVBkSUglMkZxbzd1eXA3NWV2NE1qbTkwamxrQnJMNkxTazlnOWRCOVZGZURKaW5nNEo3N3BvZnV5a1ZyWmVUd3BuRUpRaFVhcWJVNkJyMW9WY29nVXRWZmdTbGgyM1k5UGpCeDglMkJBZk1DJTJGdDB2aHduSFNwYjVOSkdPY0g2TFdCVVNwY0JLYVI3WnZaUld2NGpWTktxVDJqR1BQQVdVTmJkdWVRZ0gxWVQ5OFgwamljbVFtNDR1MnRvNk1tSU5UMEQ4Wk9HNHFaYzlQTHU0d2ZJMTB0b0pNQ2cxUVo3QnVqSWtQV2dBTW1PTXRFc1VyaTczQ2FJRDN0VHBMaHk2enp3cnYlMkI4TkNPYUtJTXNGbXNqQzNJZEpyT1QxNWdjYlYzNnNGNjgybUJwdkFDV0t6am5uUEpvNE5pd0tzWGsya00lMkZHYTdrUEY2UjRWbXRVZm5KMklJaHhCYVdWczRoeFVKODJqMUR4cDNEQkpmQmhFWlVKYjRlUFJWMDdFSk5DMmlxVFJRS2dFOEdwS1NFSnk4MzhPa0cyTWQ0aTUwN2lYd0E4UTZqMzJPZWFXWSUyQiUyRjJvQm9yZmdBSWw4b0tHTUhoVXlpYlg4TTZySXZIS1puU0VOWWFaYXVwVEQ0aHVLRkJqcUhBdjlMSWM5bWpLVkozQk0wU3pXOExEQmMwanBNZ2NjckF6Z2pHaWNQMmlOJTJGRSUyQiUyRmF1Vk1CSHlicjBkSlE3aXhLT3JwMFFSeGN0RU9tdHY1NkZCRjBtZDhUMzd4ZTdkd3F0Nm1OOTRCbkVPZ1pjejdrOXVZOXVYTFM0bkthbiUyRnM3SUZQenpkdVhsY2RMNHhid0xzZFJjSHJJYUF5S2lIelZJNjdqUWxrcjNkZ1czUk9RUlJrSk00bXVjY08yOWhvcGJ0Z2ZxYW1JM2lUY2syTkRoQ1klMkIlMkJzOGVaTHR3bVZWMDhBNURzZFpxS2NyZVBhcGx0Wk8zMWU4WlNaRU42UDNjbnlQalRTdXl2Z3VQWldnMUpBbkZTQkdBZ01ZbXg3am1mY2RVTGpiNEw5S2xKZ2N5VHI1JTJGUTJ5OHBVZGkxd1lURU1yJTJGaGhLJTJGQjJJakZPcTc4VXY4YmolMkZ0UW1DYkdNeE4mWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JlgtQW16LVNpZ25hdHVyZT1hMjMwNGQ2NWMwYTg5NGQ3MzY2NzFhOGI0NDZhNTVmMjU1ZTA3NDU3MDRjMTlkZGQ4OTUxZDI2NWYzOWRjYzdkXG4qL1xuXG4vKlxuZnVuY3Rpb24gc2VuZEJlYWNvblJlcXVlc3QoeyBcbiAgY3JlZGVudGlhbHMsIFxuICBwaW5wb2ludEFwcElkLCBcbiAgcmVnaW9uLCBcbiAgZXZlbnRzUmVxdWVzdCxcbiAgdXJsXG59KSB7XG5cdGNvbnN0IGFjY2Vzc0luZm8gPSB7XG5cdFx0c2VjcmV0X2tleTogY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5LFxuXHRcdGFjY2Vzc19rZXk6IGNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkLFxuXHRcdHNlc3Npb25fdG9rZW46IGNyZWRlbnRpYWxzLnNlc3Npb25Ub2tlbixcblx0fVxuXHRjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoZXZlbnRzUmVxdWVzdCk7XG5cdGNvbnN0IG1ldGhvZCA9ICdQT1NUJztcblxuICAvLyBQaW5wb2ludHQgaHR0cHM6Ly9waW5wb2ludC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS92MS9hcHBzLzExMTEvZXZlbnRzL2xlZ2FjeVxuXHRjb25zdCByZXF1ZXN0ID0ge1xuXHRcdHVybCxcblx0XHRib2R5LFxuXHRcdG1ldGhvZCxcblx0fTtcblxuXHRjb25zdCBzZXJ2aWNlSW5mbyA9IHsgXG4gICAgcmVnaW9uLCBcbiAgICAvL3NlcnZpY2U6ICdtb2JpbGV0YXJnZXRpbmcnLFxuICAgIHNlcnZpY2U6ICdsYW1iZGEnIFxuICB9O1xuXG5cdGNvbnN0IHJlcXVlc3RVcmwgPSBTaWduZXIuc2lnblVybChcblx0XHRyZXF1ZXN0LFxuXHRcdGFjY2Vzc0luZm8sXG5cdFx0c2VydmljZUluZm8sXG5cdFx0bnVsbFxuXHQpO1xuXG5cdGNvbnN0IHN1Y2Nlc3MgPSBuYXZpZ2F0b3Iuc2VuZEJlYWNvbihyZXF1ZXN0VXJsLCBib2R5KTtcblxuXHRpZiAoc3VjY2Vzcykge1xuXHRcdHJldHVybiBjb25zb2xlLmxvZygnc2VuZEJlYWNvbiBzdWNjZXNzJyk7XG5cdH1cblx0cmV0dXJuIGNvbnNvbGUubG9nKCdzZW5kQmVhY29uIGZhaWx1cmUnKTtcbn1cbi8qKi9cblxuLyogdXBkYXRlRW5kcG9pbnQgdXNhZ2U6XG51cGRhdGVFbmRwb2ludCh7XG4gIFwiQWRkcmVzc1wiOiAndGVzdEBnbWFpbC5jb20nLFxuICBcIkF0dHJpYnV0ZXNcIjogeyBcImxvbFwiOiBbJ3RoaW5nJ10sIGJhejogJ2JhcicgfSxcbiAgXCJEZW1vZ3JhcGhpY1wiOiB7XG4gICAgXCJBcHBWZXJzaW9uXCI6IHN0cmluZyxcbiAgICBcIkxvY2FsZVwiOiBzdHJpbmcsXG4gICAgXCJNYWtlXCI6IHN0cmluZyxcbiAgICBcIk1vZGVsXCI6IHN0cmluZyxcbiAgICBcIk1vZGVsVmVyc2lvblwiOiBzdHJpbmcsXG4gICAgXCJQbGF0Zm9ybVwiOiBzdHJpbmcsXG4gICAgXCJQbGF0Zm9ybVZlcnNpb25cIjogc3RyaW5nLFxuICAgIFwiVGltZXpvbmVcIjogc3RyaW5nXG4gIH0sXG4gIFwiTG9jYXRpb25cIjoge1xuICAgIFwiQ2l0eVwiOiBzdHJpbmcsXG4gICAgXCJDb3VudHJ5XCI6IHN0cmluZyxcbiAgICBcIkxhdGl0dWRlXCI6IG51bWJlcixcbiAgICBcIkxvbmdpdHVkZVwiOiBudW1iZXIsXG4gICAgXCJQb3N0YWxDb2RlXCI6IHN0cmluZyxcbiAgICBcIlJlZ2lvblwiOiBzdHJpbmdcbiAgfSxcbiAgXCJNZXRyaWNzXCI6IHsgXCJrZXlcIjogMSB9LFxuICBcIk9wdE91dFwiOiAnTk9ORScsXG4gIFwiVXNlclwiOiB7XG4gICAgXCJVc2VyQXR0cmlidXRlc1wiOiB7IFwia2V5XCI6ICdiYXonLCAnd2FodCc6IFsnY2hpbGwnXSB9LFxuICAgIFwiVXNlcklkXCI6ICd1c2VyLTEyMydcbiAgfVxufSlcblxuLy8gc21hbGxlciBleGFtcGxlXG51cGRhdGVFbmRwb2ludCh7XG4gIFwiQWRkcmVzc1wiOiAnamltYm9AZ21haWwuY29tJyxcbiAgXCJBdHRyaWJ1dGVzXCI6IHsgXCJsb2xcIjogWyd0aGluZyddLCBiYXo6ICdiYXInIH0sXG4gIFwiTWV0cmljc1wiOiB7IFwia2V5XCI6IDEgfSxcbiAgXCJPcHRPdXRcIjogJ05PTkUnLFxuICBcIlVzZXJcIjoge1xuICAgIFwiVXNlckF0dHJpYnV0ZXNcIjogeyBcImtleVwiOiAnYmF6JywgJ3dhaHQnOiBbJ2NoaWxsJ10gfSxcbiAgICBcIlVzZXJJZFwiOiAndXNlci14eXonXG4gIH1cbn0pXG4qL1xuXG5mdW5jdGlvbiBsb2FkRXJyb3IoKSB7XG4gIHRocm93IG5ldyBFcnJvcignUGlucG9pbnQgbm90IGxvYWRlZCcpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRFdmVudERhdGEob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBhY2MubWV0cmljc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGFjYy5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7XG4gICAgYXR0cmlidXRlczoge30sXG4gICAgbWV0cmljczoge31cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJvb3RzdHJhcChwbHVnaW5BcGkpIHtcbiAgdmFyIGNvbmZpZyA9IHBsdWdpbkFwaS5jb25maWcsXG4gICAgICBpbnN0YW5jZSA9IHBsdWdpbkFwaS5pbnN0YW5jZTtcbiAgLyogTG9hZCBhd3MtcGlucG9pbnQgc2NyaXB0IGFmdGVyIHVzZXJJZCBleGlzdHMgKi9cblxuICBpZiAoY29uZmlnICYmIGNvbmZpZy5kaXNhYmxlQW5vbnltb3VzVHJhZmZpYyAmJiAhaW5zdGFuY2UudXNlcigndXNlcklkJykpIHtcbiAgICBpbnN0YW5jZS5vbmNlKCdpZGVudGlmeVN0YXJ0JywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBwbHVnaW5zID0gX3JlZi5wbHVnaW5zO1xuICAgICAgdmFyIHNlbGYgPSBwbHVnaW5zWydhd3MtcGlucG9pbnQnXTtcblxuICAgICAgaWYgKCFzZWxmLmxvYWRlZCgpKSB7XG4gICAgICAgIGluc3RhbmNlLmxvYWRQbHVnaW4oJ2F3cy1waW5wb2ludCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8vIGltcG9ydCB7IG9uU2Nyb2xsQ2hhbmdlIH0gZnJvbSAnQGFuYWx5dGljcy9zY3JvbGwtdXRpbHMnXG4vLyBAVE9ETyB0dXJuIG9uIGNvbnNlbnRcbi8vIGxldCBoYXNBbm9uQ29uc2VudCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChgX19hbm9uLWNvbnNlbnQ9dHJ1ZWApXG4vLyBsZXQgaGFzRnVsbENvbnNlbnQgPSBkb2N1bWVudC5jb29raWUubWF0Y2goYF9fZnVsbC1jb25zZW50PXRydWVgKVxuXG52YXIgY29uZmlnID0ge1xuICAvKiBEaXNhYmxlIGFub255bW91cyBNVFUgKi9cbiAgZGlzYWJsZUFub255bW91c1RyYWZmaWM6IGZhbHNlLFxuICAvLyBQaW5wb2ludCBzZXJ2aWNlIHJlZ2lvblxuICBwaW5wb2ludFJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gIC8vIEN1c3RvbSBldmVudCBtYXBwaW5nXG4gIGV2ZW50TWFwcGluZzoge31cbn07XG4vKipcbiAqIEFXUyBQaW5wb2ludCBhbmFseXRpY3MgaW50ZWdyYXRpb25cbiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9waW5wb2ludC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvXG4gKiBAcGFyYW0ge29iamVjdH0gcGx1Z2luQ29uZmlnIC0gUGx1Z2luIHNldHRpbmdzXG4gKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2luQ29uZmlnLnBpbnBvaW50QXBwSWQgLSBBV1MgUGlucG9pbnQgYXBwIElkIGZvciBjbGllbnQgc2lkZSB0cmFja2luZ1xuICogQHBhcmFtIHtmdW5jdGlvbn0gcGx1Z2luQ29uZmlnLmdldENyZWRlbnRpYWxzIC0gQXN5bmMgZnVuY3Rpb24gdG8gZ2V0IEFXUyBDb2duaXRvIGNyZWRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3BsdWdpbkNvbmZpZy5waW5wb2ludFJlZ2lvbl0gLSBBV1MgUGlucG9pbnQgcmVnaW9uLiBEZWZhdWx0cyB0byB1cy1lYXN0LTFcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGx1Z2luQ29uZmlnLmFwcFRpdGxlXSAtIFRoZSB0aXRsZSBvZiB0aGUgYXBwIHRoYXQncyByZWNvcmRpbmcgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IFtwbHVnaW5Db25maWcuYXBwUGFja2FnZU5hbWVdIC0gVGhlIG5hbWUgb2YgdGhlIGFwcCBwYWNrYWdlLCBzdWNoIGFzIGNvbS5leGFtcGxlLm15X2FwcC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGx1Z2luQ29uZmlnLmFwcFZlcnNpb25Db2RlXSAtIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgYXBwLCBzdWNoIGFzIDMuMi4wXG4gKiBAcGFyYW0ge3N0cmluZ30gW3BsdWdpbkNvbmZpZy5maXBzXSAtIFVzZSB0aGUgQVdTIEZJUFMgc2VydmljZSBlbmRwb2ludCBmb3IgUGlucG9pbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsdWdpbkNvbmZpZy5kaXNhYmxlQW5vbnltb3VzVHJhZmZpY10gLSAgRGlzYWJsZSBhbm9ueW1vdXMgZXZlbnRzIGZyb20gZmlyaW5nXG4gKiBAcmV0dXJuIHtvYmplY3R9IEFuYWx5dGljcyBwbHVnaW5cbiAqIEBleGFtcGxlXG4gKlxuICogYXdzUGlucG9pbnRQbHVnaW4oe1xuICogICBwaW5wb2ludEFwcElkOiAnOTM4YmViYjFhZTk1NGUxMjMxMzMyMTMxNjBmMmIzYmU0JyxcbiAqICAgZ2V0Q3JlZGVudGlhbHM6ICgpID0+IEF1dGguY3VycmVudENyZWRlbnRpYWxzKCksXG4gKiB9KVxuICovXG5cbmZ1bmN0aW9uIGF3c1BpbnBvaW50UGx1Z2luKCkge1xuICB2YXIgcGx1Z2luQ29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIHJlY29yZEV2ZW50O1xuICB2YXIgdXBkYXRlRW5kcG9pbnQ7XG4gIC8vIGxldCBzY3JvbGxEZXB0aE5vdyA9IDBcblxuICAvKiBQYWdlLXNlc3Npb24gKG9uIHJvdXRlIGNoYW5nZXMpICovXG5cbiAgdmFyIGhhc1BhZ2VGaXJlZE9uY2UgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBzdG9wU2Vzc2lvbigpIHtcbiAgICB2YXIgY3VycmVudFNlc3Npb25EYXRhID0gZ2V0U2Vzc2lvbigpO1xuXG4gICAgaWYgKHBsdWdpbkNvbmZpZy5kZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coJ1N0b3Agc2Vzc2lvbicsIGN1cnJlbnRTZXNzaW9uRGF0YSk7XG4gICAgfSAvLyBGaXJlIHNlc3Npb24gc3RvcCBldmVudC5cblxuXG4gICAgcmVjb3JkRXZlbnQoU0VTU0lPTl9TVE9QJDIsIHRydWUpO1xuICB9IC8vIHdpbmRvdy5zdG9wU2Vzc2lvbiA9IHN0b3BTZXNzaW9uXG5cblxuICBmdW5jdGlvbiBzdGFydE5ld1Nlc3Npb24oKSB7XG4gICAgLy8gU2V0IG5ldyBzZXNzaW9ucy5cbiAgICB2YXIgbmV3U2Vzc2lvbiA9IHNldFNlc3Npb24oMzApO1xuXG4gICAgaWYgKHBsdWdpbkNvbmZpZy5kZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coJ1NUQVJUIFNFU1NJT04nLCBuZXdTZXNzaW9uKTtcbiAgICB9IC8vIEBUT0RPIGRvIHdlIHdhbnQgdGhpcyBoZXJlPy4uLi5cbiAgICAvLyBjb25zdCBwYWdlU2Vzc2lvbiA9IGdlbmVyYXRlUGFnZVNlc3Npb24oKVxuXG4gICAgLyogRmlyZSBzZXNzaW9uIHN0YXJ0IGV2ZW50LiAqL1xuXG5cbiAgICByZWNvcmRFdmVudChTRVNTSU9OX1NUQVJUJDEpO1xuICB9IC8vIHdpbmRvdy5zdGFydFNlc3Npb24gPSBzdGFydE5ld1Nlc3Npb25cblxuICAvKiByZXR1cm4gcGx1Z2luICovXG5cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdhd3MtcGlucG9pbnQnLFxuICAgIGNvbmZpZzogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb25maWcpLCBwbHVnaW5Db25maWcpLFxuICAgIGJvb3RzdHJhcDogYm9vdHN0cmFwLFxuICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIGluaXRpYWxpemUkMShfcmVmKSB7XG4gICAgICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlO1xuICAgICAgdmFyIGRpc2FibGVBbm9ueW1vdXNUcmFmZmljID0gY29uZmlnLmRpc2FibGVBbm9ueW1vdXNUcmFmZmljLFxuICAgICAgICAgIGRlYnVnID0gY29uZmlnLmRlYnVnO1xuICAgICAgdmFyIGxvZ2dlciA9IGRlYnVnID8gY29uc29sZS5sb2cgOiBmdW5jdGlvbiAoKSB7fTtcbiAgICAgIC8qIERpc2FibGUgcGlucG9pbnQgaWYgdXNlciBpcyBub3QgeWV0IGlkZW50aWZpZWQuICovXG5cbiAgICAgIHZhciBzdGF0ZSA9IGluc3RhbmNlLmdldFN0YXRlKCk7XG4gICAgICB2YXIgdXNlckRldGFpbHMgPSBzdGF0ZS51c2VyIHx8IHt9O1xuICAgICAgdmFyIHVzZXJJZCA9IHVzZXJEZXRhaWxzLnVzZXJJZCxcbiAgICAgICAgICBhbm9ueW1vdXNJZCA9IHVzZXJEZXRhaWxzLmFub255bW91c0lkO1xuICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0IHx8IHt9O1xuICAgICAgdmFyIGFwcCA9IGNvbnRleHQuYXBwLFxuICAgICAgICAgIHZlcnNpb24gPSBjb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgY2FtcGFpZ24gPSBjb250ZXh0LmNhbXBhaWduO1xuICAgICAgLyogSW5pdGlhbGl6ZSBzZXNzaW9uIGluZm8gKi9cblxuICAgICAgdmFyIGluaXRQYWdlU2Vzc2lvbiA9IGdldFBhZ2VTZXNzaW9uKCk7XG4gICAgICB2YXIgaW5pdFRhYlNlc3Npb24gPSBnZXRUYWJTZXNzaW9uKCk7XG4gICAgICB2YXIgaW5pdFNlc3Npb25EYXRhID0gZ2V0U2Vzc2lvbigpO1xuICAgICAgbG9nZ2VyKCdpbml0UGFnZVNlc3Npb24nLCBpbml0UGFnZVNlc3Npb24pO1xuICAgICAgbG9nZ2VyKCdpbml0VGFiU2Vzc2lvbicsIGluaXRUYWJTZXNzaW9uKTtcbiAgICAgIGxvZ2dlcignaW5pdFNlc3Npb25EYXRhJywgaW5pdFNlc3Npb25EYXRhKTtcbiAgICAgIC8qIElmIGFub25JZCBoYXMgY2hhbmdlZCwgcmVmcmVzaCBzZXNzaW9uIGRldGFpbHMgKi9cblxuICAgICAgaWYgKGluaXRTZXNzaW9uRGF0YSAmJiBpbml0U2Vzc2lvbkRhdGEuYW5vbklkICYmIGluaXRTZXNzaW9uRGF0YS5hbm9uSWQgIT09IGFub255bW91c0lkKSB7XG4gICAgICAgIGxvZ2dlcignYW5vbklkIGRpZmZlcmVudCByZWZyZXNoIHNlc3Npb24gZGV0YWlscycpOyAvLyBjb25zb2xlLmxvZygnYW5vbklkJywgYW5vbnltb3VzSWQpXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbml0U2Vzc2lvbkRhdGEuYW5vbklkJywgaW5pdFNlc3Npb25EYXRhLmFub25JZClcblxuICAgICAgICAvKiBTZXQgbmV3IHBhZ2Ugc2Vzc2lvbiB2YWx1ZXMgKi9cblxuICAgICAgICBzZXRQYWdlU2Vzc2lvbigpO1xuICAgICAgICAvKiBTZXQgbmV3IHRhYiBzZXNzaW9uIHZhbHVlcyAqL1xuXG4gICAgICAgIHNldFRhYlNlc3Npb24oKTtcbiAgICAgICAgLyogU2V0IG5ldyBzZXNzaW9uIGZvciBuZXcgdXNlciAqL1xuXG4gICAgICAgIHZhciBuZXdTZXNzaW9uRm9yTmV3VXNlciA9IHNldFNlc3Npb24oMzAsIHtcbiAgICAgICAgICBhbm9uSWQ6IGFub255bW91c0lkLFxuICAgICAgICAgIHVzZXJJZDogdXNlcklkXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIoJ25ld1Nlc3Npb25Gb3JOZXdVc2VyJywgbmV3U2Vzc2lvbkZvck5ld1VzZXIpO1xuICAgICAgfVxuICAgICAgLyogRGlzYWJsZSBmb3IgYW5vbnltb3VzIHVzZXJzICovXG5cblxuICAgICAgaWYgKCF1c2VySWQgJiYgZGlzYWJsZUFub255bW91c1RyYWZmaWMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBjb25zdHJ1Y3QgdXRtIHBhcmFtc1xuXG5cbiAgICAgIHZhciB1dG1QYXJhbXMgPSBPYmplY3Qua2V5cyhjYW1wYWlnbikucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICBhY2NbXCJ1dG1fXCIuY29uY2F0KGtleSldID0gY2FtcGFpZ25ba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgICAgIC8qIEluaXRpYWxpemUgcGlucG9pbnQgY2xpZW50ICovXG5cbiAgICAgIHZhciBwaW5wb2ludENsaWVudCA9IGluaXRpYWxpemUoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb25maWcpLCB7fSwge1xuICAgICAgICAvLyBUaGUgdGl0bGUgb2YgdGhlIGFwcCB0aGF0J3MgcmVjb3JkaW5nIHRoZSBldmVudC5cbiAgICAgICAgYXBwVGl0bGU6IGNvbmZpZy5hcHBUaXRsZSB8fCBhcHAsXG4gICAgICAgIC8vIFRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlIGFwcCB0aGF0J3MgcmVjb3JkaW5nIHRoZSBldmVudC5cbiAgICAgICAgYXBwUGFja2FnZU5hbWU6IGNvbmZpZy5hcHBQYWNrYWdlTmFtZSB8fCBhcHAsXG4gICAgICAgIC8vIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgYXBwIHRoYXQncyByZWNvcmRpbmcgdGhlIGV2ZW50LlxuICAgICAgICBhcHBWZXJzaW9uQ29kZTogY29uZmlnLmFwcFZlcnNpb25Db2RlIHx8IHZlcnNpb24sXG4gICAgICAgIC8vIEN1c3RvbSBldmVudCBtYXBwaW5nXG4gICAgICAgIGV2ZW50TWFwcGluZzogY29uZmlnLmV2ZW50TWFwcGluZyxcbiAgICAgICAgLy8gR2V0IHBpbnBvaW50IGVuZHBvaW50IElEXG4gICAgICAgIGdldEVuZHBvaW50SWQ6IGZ1bmN0aW9uIGdldEVuZHBvaW50SWQoKSB7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVzZXIoJ2Fub255bW91c0lkJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFVzZXJJZDogZnVuY3Rpb24gZ2V0VXNlcklkKCkge1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZS51c2VyKCd1c2VySWQnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q29udGV4dDogZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2Vzc2lvbktleTogY29uZmlnLnNlc3Npb25LZXksXG4gICAgICAgICAgICBwYWdlVmlld0tleTogY29uZmlnLnBhZ2VWaWV3S2V5LFxuICAgICAgICAgICAgaW5pdGlhbFNlc3Npb246IGluaXRTZXNzaW9uRGF0YSAvLyBzY3JvbGxEZXB0aDogc2Nyb2xsRGVwdGhOb3csXG4gICAgICAgICAgICAvLyBzY3JvbGxEZXB0aE1heFxuXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5yaWNoRXZlbnRBdHRyaWJ1dGVzOiBmdW5jdGlvbiBlbnJpY2hFdmVudEF0dHJpYnV0ZXMoKSB7XG4gICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgYW5vbklkOiBpbnN0YW5jZS51c2VyKCdhbm9ueW1vdXNJZCcpLFxuICAgICAgICAgICAgdXNlcklkOiBpbnN0YW5jZS51c2VyKCd1c2VySWQnKSxcbiAgICAgICAgICAgIGhhc2g6IHdpbmRvdy5sb2NhdGlvbi5oYXNoLFxuICAgICAgICAgICAgcGF0aDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgICAgcmVmZXJyZXI6IGRvY3VtZW50LnJlZmVycmVyLFxuICAgICAgICAgICAgc2VhcmNoOiB3aW5kb3cubG9jYXRpb24uc2VhcmNoLFxuICAgICAgICAgICAgdGl0bGU6IGRvY3VtZW50LnRpdGxlLFxuICAgICAgICAgICAgaG9zdDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lXG4gICAgICAgICAgfSwgdXRtUGFyYW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQ3VzdG9tIGV2ZW50IG1hcHBpbmdcbiAgICAgICAgZW5yaWNoVXNlckF0dHJpYnV0ZXM6IGNvbmZpZy5lbnJpY2hVc2VyQXR0cmlidXRlcyxcbiAgICAgICAgLy8gUGFzcyBzY3JvbGwgaW50byB3aXRoIGFsbCBldmVudHNcbiAgICAgICAgZW5yaWNoRXZlbnRNZXRyaWNzOiBmdW5jdGlvbiBlbnJpY2hFdmVudE1ldHJpY3MoKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIC8qIHtcbiAgICAgICAgICAgIHNjcm9sbERlcHRoOiBzY3JvbGxEZXB0aE5vdyxcbiAgICAgICAgICAgIHNjcm9sbERlcHRoTWF4XG4gICAgICAgICAgfSovXG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgICAgcmVjb3JkRXZlbnQgPSBwaW5wb2ludENsaWVudC5yZWNvcmRFdmVudDtcbiAgICAgIHVwZGF0ZUVuZHBvaW50ID0gcGlucG9pbnRDbGllbnQudXBkYXRlRW5kcG9pbnQ7XG5cbiAgICAgIGlmIChpbml0U2Vzc2lvbkRhdGEgJiYgaW5pdFNlc3Npb25EYXRhLmlzTmV3KSB7XG4gICAgICAgIGxvZ2dlcihcIlN0YXJ0IGJyYW5kIG5ldyBzZXNzaW9uIGJlY2F1c2UgY29va2llIG5vdCBmb3VuZFwiKTtcbiAgICAgICAgLyogU3RhcnQgbmV3IHNlc3Npb24gaWYgaXRzIG5ldyAqL1xuXG4gICAgICAgIHJlY29yZEV2ZW50KFNFU1NJT05fU1RBUlQkMSk7XG4gICAgICB9XG4gICAgICB2YXIgVEhJUlRZX01JTlVURVMgPSAxODBlNDsgLy8gMTgwMDAwMG1zXG5cbiAgICAgIHZhciBTRVNTSU9OX0xFTkdUSCA9IFRISVJUWV9NSU5VVEVTOyAvLyBTRVNTSU9OX0xFTkdUSCA9IDIwMDAwXG5cbiAgICAgIG9uVXNlckFjdGl2aXR5KHtcbiAgICAgICAgdGltZW91dDogU0VTU0lPTl9MRU5HVEgsXG4gICAgICAgIHRocm90dGxlOiAyMDAwMCxcbiAgICAgICAgb25JZGxlOiBmdW5jdGlvbiBvbklkbGUoYWN0aXZlVGltZSwgZXZlbnQpIHtcbiAgICAgICAgICBsb2dnZXIoXCJTZXNzaW9uIGlkbGUuIEFjdGl2ZSBcIi5jb25jYXQoYWN0aXZlVGltZSwgXCIgc2Vjb25kc1wiKSk7IC8vIFN0b3Agc2Vzc2lvblxuXG4gICAgICAgICAgc3RvcFNlc3Npb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25XYWtlVXA6IGZ1bmN0aW9uIG9uV2FrZVVwKGlkbGVUaW1lLCBldmVudCkge1xuICAgICAgICAgIGxvZ2dlcihcIlNlc3Npb24gd2FrZXVwLiBJZGxlIFwiLmNvbmNhdChpZGxlVGltZSwgXCIgc2Vjb25kc1wiKSk7IC8vIFJlc2V0IHNlc3Npb24gaW5mb1xuXG4gICAgICAgICAgc3RhcnROZXdTZXNzaW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSGVhcnRiZWF0OiBmdW5jdGlvbiBvbkhlYXJ0YmVhdCh0aW1lQWN0aXZlLCBldmVudCkge1xuICAgICAgICAgIGxvZ2dlcigncGluZyBzZXNzaW9uJywgbmV3IERhdGUoKSk7XG4gICAgICAgICAgbG9nZ2VyKCd0b3RhbCBhY3RpdmUgdGltZScsIHRpbWVBY3RpdmUpO1xuICAgICAgICAgIC8qIEV4dGVuZCBjdXJyZW50IHNlc3Npb24gYnkgMzAgbWludXRlcyAqL1xuXG4gICAgICAgICAgdmFyIHVzZXIgPSBpbnN0YW5jZS51c2VyKCk7XG4gICAgICAgICAgZXh0ZW5kU2Vzc2lvbigzMCwge1xuICAgICAgICAgICAgYW5vbklkOiB1c2VyLmFub255bW91c0lkLFxuICAgICAgICAgICAgdXNlcklkOiB1c2VyLnVzZXJJZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8qIE9sZCBzZXNzaW9uIGhhbmRsZXJcbiAgICAgIHRhYkxpc3RlbmVyID0gb25UYWJDaGFuZ2UoKGlzSGlkZGVuKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpc0hpZGRlbicsIGlzSGlkZGVuKVxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBzdG9wU2Vzc2lvbigpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1Jlc2V0IHNlc3Npb24hJylcbiAgICAgICAgICBzdGFydE5ld1Nlc3Npb24oKVxuICAgICAgICB9XG4gICAgICB9KSovXG5cbiAgICAgIC8qIFNjcm9sbCB0cmFja2luZ1xuICAgICAgZnVuY3Rpb24gcGFnZVNjcm9sbGVkKGRhdGEpIHtcbiAgICAgICAgY29uc3QgeyB0cmlnZ2VyLCBkaXJlY3Rpb24sIHNjcm9sbE1heCwgc2Nyb2xsTWluLCByYW5nZSB9ID0gZGF0YVxuICAgICAgICAvLyBTZXQgY3VycmVudCBzY3JvbGwgdmFsdWVzIFxuICAgICAgICBzY3JvbGxEZXB0aE5vdyA9IHRyaWdnZXJcbiAgICAgICAgc2Nyb2xsRGVwdGhNYXggPSBzY3JvbGxNYXhcbiAgICAgICAgLy8gUmVjb3JkIHBhZ2Ugc2Nyb2xsIGV2ZW50IFxuICAgICAgICByZWNvcmRFdmVudCgncGFnZVNjcm9sbGVkJylcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRldGFjaFNjcm9sbExpc3RlbmVyID0gb25TY3JvbGxDaGFuZ2Uoe1xuICAgICAgICAvLyAyNTogcGFnZVNjcm9sbGVkLFxuICAgICAgICA1MDogcGFnZVNjcm9sbGVkLFxuICAgICAgICA3NTogcGFnZVNjcm9sbGVkLFxuICAgICAgICA5MDogcGFnZVNjcm9sbGVkXG4gICAgICB9KSovXG4gICAgfSxcbiAgICBwYWdlOiBmdW5jdGlvbiBwYWdlKF9yZWYyKSB7XG4gICAgICBfcmVmMi5wYXlsb2FkO1xuICAgICAgICAgIF9yZWYyLmNvbmZpZztcblxuICAgICAgaWYgKCFyZWNvcmRFdmVudCkge1xuICAgICAgICByZXR1cm4gbG9hZEVycm9yKCk7XG4gICAgICB9IC8vIEZpcmUgcGFnZSB2aWV3IGFuZCB1cGRhdGUgcGFnZVNlc3Npb25JbmZvIElkXG5cblxuICAgICAgaWYgKGhhc1BhZ2VGaXJlZE9uY2UpIHtcbiAgICAgICAgLy8gU2V0IG5ldyBwYWdlIHNlc3Npb24gdmFsdWVzXG4gICAgICAgIHNldFBhZ2VTZXNzaW9uKCk7XG4gICAgICB9XG5cbiAgICAgIHJlY29yZEV2ZW50KFBBR0VfVklFVyk7XG4gICAgICBoYXNQYWdlRmlyZWRPbmNlID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyogVHJhY2sgZXZlbnQgJiB1cGRhdGUgZW5kcG9pbnQgZGV0YWlscyAqL1xuICAgIHRyYWNrOiBmdW5jdGlvbiB0cmFjayhfcmVmMykge1xuICAgICAgdmFyIHBheWxvYWQgPSBfcmVmMy5wYXlsb2FkLFxuICAgICAgICAgIGNvbmZpZyA9IF9yZWYzLmNvbmZpZztcbiAgICAgICAgICBfcmVmMy5pbnN0YW5jZTtcblxuICAgICAgaWYgKCFyZWNvcmRFdmVudCkge1xuICAgICAgICByZXR1cm4gbG9hZEVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuZGlzYWJsZUFub255bW91c1RyYWZmaWMgJiYgIXBheWxvYWQudXNlcklkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGRhdGEgPSBmb3JtYXRFdmVudERhdGEocGF5bG9hZC5wcm9wZXJ0aWVzKTtcbiAgICAgIHJlY29yZEV2ZW50KHBheWxvYWQuZXZlbnQsIGRhdGEpO1xuICAgIH0sXG5cbiAgICAvKiBVcGRhdGUgZW5kcG9pbnQgZGV0YWlscyAqL1xuICAgIGlkZW50aWZ5OiBmdW5jdGlvbiBpZGVudGlmeShfcmVmNCkge1xuICAgICAgdmFyIHBheWxvYWQgPSBfcmVmNC5wYXlsb2FkO1xuICAgICAgdmFyIHVzZXJJZCA9IHBheWxvYWQudXNlcklkLFxuICAgICAgICAgIHRyYWl0cyA9IHBheWxvYWQudHJhaXRzO1xuXG4gICAgICBpZiAoIXVwZGF0ZUVuZHBvaW50KSB7XG4gICAgICAgIHJldHVybiBsb2FkRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVuZHBvaW50ID0ge307XG4gICAgICB2YXIgdXNlckluZm8gPSB7fTtcblxuICAgICAgaWYgKHVzZXJJZCkge1xuICAgICAgICB1c2VySW5mby5Vc2VySWQgPSB1c2VySWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFpdHMgJiYgT2JqZWN0LmtleXModHJhaXRzKS5sZW5ndGgpIHtcbiAgICAgICAgdXNlckluZm8uVXNlckF0dHJpYnV0ZXMgPSB0cmFpdHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyh1c2VySW5mbykubGVuZ3RoKSB7XG4gICAgICAgIGVuZHBvaW50LlVzZXIgPSB1c2VySW5mbztcbiAgICAgIH0gLy8gVXBkYXRlIGVuZHBvaW50IGluIEFXUyBwaW5wb2ludFxuXG5cbiAgICAgIHVwZGF0ZUVuZHBvaW50KGVuZHBvaW50LCB0cnVlKTtcbiAgICB9LFxuXG4gICAgLyogUmVzZXQgdXNlciBkZXRhaWxzICovXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KF9yZWY1KSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBfcmVmNS5pbnN0YW5jZTtcbiAgICAgIHZhciBpZCA9IGluc3RhbmNlLnVzZXIoJ2Fub255bW91c0lkJyk7XG4gICAgICB2YXIga2V5ID0gZ2V0U3RvcmFnZUtleShpZCk7XG4gICAgICByZW1vdmVJdGVtKGtleSk7XG4gICAgfSxcbiAgICBsb2FkZWQ6IGZ1bmN0aW9uIGxvYWRlZCgpIHtcbiAgICAgIHJldHVybiAhIXJlY29yZEV2ZW50O1xuICAgIH1cbiAgfTtcbn1cblxuLyogVGhpcyBtb2R1bGUgd2lsbCBzaGFrZSBvdXQgdW51c2VkIGNvZGUgKyB3b3JrIGluIGJyb3dzZXIgYW5kIG5vZGUg8J+OiSAqL1xuXG52YXIgaW5kZXggPSBhd3NQaW5wb2ludFBsdWdpbiA7XG5cbmV4cG9ydCB7IGV2ZW50cyBhcyBQSU5QT0lOVF9FVkVOVFMsIGluZGV4IGFzIGRlZmF1bHQsIGZvcm1hdEV2ZW50IH07XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTcgRW52aXJvbm1lbnRhbCBTeXN0ZW1zIFJlc2VhcmNoIEluc3RpdHV0ZSwgSW5jLlxuICogQXBhY2hlLTIuMCAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVycyB0byBzZWUgaWYgd2Ugc2hvdWxkIHVzZSBGb3JtRGF0YSB0byBzZW5kIHRoZSByZXF1ZXN0XG4gKiBAcGFyYW0gcGFyYW1zIFRoZSBvYmplY3Qgd2hvc2Uga2V5cyB3aWxsIGJlIGVuY29kZWQuXG4gKiBAcmV0dXJuIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIEZvcm1EYXRhIHdpbGwgYmUgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlc0Zvcm1EYXRhKHBhcmFtcykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwYXJhbXMpLnNvbWUoKGtleSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBwYXJhbXNba2V5XTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS50b1BhcmFtKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvUGFyYW0oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0eXBlID0gdmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSBcIkRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIFwiRnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIFwiQm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgXCJTdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIFwiTnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBwYXJhbWV0ZXJzIHRvIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gdG8gc2VuZCB0byB0aGUgQXJjR0lTIFJFU1QgQVBJLlxuICogQHBhcmFtIHBhcmFtcyBUaGUgb2JqZWN0IHdob3NlIGtleXMgd2lsbCBiZSBlbmNvZGVkLlxuICogQHJldHVybiBBIG5ldyBvYmplY3Qgd2l0aCBwcm9wZXJseSBlbmNvZGVkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NQYXJhbXMocGFyYW1zKSB7XG4gICAgY29uc3QgbmV3UGFyYW1zID0ge307XG4gICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgbGV0IHBhcmFtID0gcGFyYW1zW2tleV07XG4gICAgICAgIGlmIChwYXJhbSAmJiBwYXJhbS50b1BhcmFtKSB7XG4gICAgICAgICAgICBwYXJhbSA9IHBhcmFtLnRvUGFyYW0oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmFtICYmXG4gICAgICAgICAgICBwYXJhbSAhPT0gMCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhcmFtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhcmFtICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcmFtLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgLy8gcHJvcGVybHkgZW5jb2RlcyBvYmplY3RzLCBhcnJheXMgYW5kIGRhdGVzIGZvciBhcmNnaXMuY29tIGFuZCBvdGhlciBzZXJ2aWNlcy5cbiAgICAgICAgLy8gcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL0VzcmkvZXNyaS1sZWFmbGV0L2Jsb2IvbWFzdGVyL3NyYy9SZXF1ZXN0LmpzI0wyMi1MMzBcbiAgICAgICAgLy8gYWxzbyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0VzcmkvYXJjZ2lzLXJlc3QtanMvaXNzdWVzLzE4OlxuICAgICAgICAvLyBudWxsLCB1bmRlZmluZWQsIGZ1bmN0aW9uIGFyZSBleGNsdWRlZC4gSWYgeW91IHdhbnQgdG8gc2VuZCBhbiBlbXB0eSBrZXkgeW91IG5lZWQgdG8gc2VuZCBhbiBlbXB0eSBzdHJpbmcgXCJcIi5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgICAgICAgICAvLyBCYXNlZCBvbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJyYXksIGNsYXNzaWZ5IGFycmF5IGFzIGFuIGFycmF5IG9mIGFycmF5cywgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuICAgICAgICAgICAgICAgIC8vIHRvIGJlIHN0cmluZ2lmaWVkLCBvciBhbiBhcnJheSBvZiBub24tb2JqZWN0cyB0byBiZSBjb21tYS1zZXBhcmF0ZWRcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEVsZW1lbnRUeXBlID0gKF9iID0gKF9hID0gcGFyYW1bMF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm5hbWU7XG4gICAgICAgICAgICAgICAgdmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICBmaXJzdEVsZW1lbnRUeXBlID09PSBcIkFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyYW0gLy8gcGFzcyB0aHJ1IGFycmF5IG9mIGFycmF5c1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBmaXJzdEVsZW1lbnRUeXBlID09PSBcIk9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShwYXJhbSkgLy8gc3RyaW5naWZ5IGFycmF5IG9mIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBhcmFtLmpvaW4oXCIsXCIpOyAvLyBqb2luIG90aGVyIHR5cGVzIG9mIGFycmF5IGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeShwYXJhbSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiRGF0ZVwiOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW0udmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtICsgXCJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSAwIHx8XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBuZXdQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld1BhcmFtcztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb2Nlc3MtcGFyYW1zLmpzLm1hcCIsIi8qIENvcHlyaWdodCAoYykgMjAxNyBFbnZpcm9ubWVudGFsIFN5c3RlbXMgUmVzZWFyY2ggSW5zdGl0dXRlLCBJbmMuXG4gKiBBcGFjaGUtMi4wICovXG5pbXBvcnQgeyBwcm9jZXNzUGFyYW1zIH0gZnJvbSBcIi4vcHJvY2Vzcy1wYXJhbXMuanNcIjtcbi8qKlxuICogRW5jb2RlcyBrZXlzIGFuZCBwYXJhbWV0ZXJzIGZvciB1c2UgaW4gYSBVUkwncyBxdWVyeSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGtleSBQYXJhbWV0ZXIncyBrZXlcbiAqIEBwYXJhbSB2YWx1ZSBQYXJhbWV0ZXIncyB2YWx1ZVxuICogQHJldHVybnMgUXVlcnkgc3RyaW5nIHdpdGgga2V5IGFuZCB2YWx1ZSBwYWlycyBzZXBhcmF0ZWQgYnkgXCImXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVBhcmFtKGtleSwgdmFsdWUpIHtcbiAgICAvLyBGb3IgYXJyYXkgb2YgYXJyYXlzLCByZXBlYXQga2V5PXZhbHVlIGZvciBlYWNoIGVsZW1lbnQgb2YgY29udGFpbmluZyBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXSAmJiBBcnJheS5pc0FycmF5KHZhbHVlWzBdKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIC5tYXAoKGFycmF5RWxlbSkgPT4gZW5jb2RlUGFyYW0oa2V5LCBhcnJheUVsZW0pKVxuICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG59XG4vKipcbiAqIEVuY29kZXMgdGhlIHBhc3NlZCBvYmplY3QgYXMgYSBxdWVyeSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHBhcmFtcyBBbiBvYmplY3QgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIEFuIGVuY29kZWQgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlUXVlcnlTdHJpbmcocGFyYW1zKSB7XG4gICAgY29uc3QgbmV3UGFyYW1zID0gcHJvY2Vzc1BhcmFtcyhwYXJhbXMpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhuZXdQYXJhbXMpXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICByZXR1cm4gZW5jb2RlUGFyYW0oa2V5LCBuZXdQYXJhbXNba2V5XSk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW5jb2RlLXF1ZXJ5LXN0cmluZy5qcy5tYXAiLCJleHBvcnQgY29uc3QgRm9ybURhdGEgPSBnbG9iYWxUaGlzLkZvcm1EYXRhO1xuZXhwb3J0IGNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGU7XG5leHBvcnQgY29uc3QgQmxvYiA9IGdsb2JhbFRoaXMuQmxvYjtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxNyBFbnZpcm9ubWVudGFsIFN5c3RlbXMgUmVzZWFyY2ggSW5zdGl0dXRlLCBJbmMuXG4gKiBBcGFjaGUtMi4wICovXG5pbXBvcnQgeyBwcm9jZXNzUGFyYW1zLCByZXF1aXJlc0Zvcm1EYXRhIH0gZnJvbSBcIi4vcHJvY2Vzcy1wYXJhbXMuanNcIjtcbmltcG9ydCB7IGVuY29kZVF1ZXJ5U3RyaW5nIH0gZnJvbSBcIi4vZW5jb2RlLXF1ZXJ5LXN0cmluZy5qc1wiO1xuaW1wb3J0IHsgRm9ybURhdGEgfSBmcm9tIFwiQGVzcmkvYXJjZ2lzLXJlc3QtZm9ybS1kYXRhXCI7XG4vKipcbiAqIEVuY29kZXMgcGFyYW1ldGVycyBpbiBhIFtGb3JtRGF0YV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Zvcm1EYXRhKSBvYmplY3QgaW4gYnJvd3NlcnMgb3IgaW4gYSBbRm9ybURhdGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhKSBpbiBOb2RlLmpzXG4gKlxuICogQHBhcmFtIHBhcmFtcyBBbiBvYmplY3QgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIFRoZSBjb21wbGV0ZSBbRm9ybURhdGFdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Gb3JtRGF0YSkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRm9ybURhdGEocGFyYW1zLCBmb3JjZUZvcm1EYXRhKSB7XG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Fc3JpL2FyY2dpcy1yZXN0LWpzL2lzc3Vlcy80OTkgZm9yIG1vcmUgaW5mby5cbiAgICBjb25zdCB1c2VGb3JtRGF0YSA9IHJlcXVpcmVzRm9ybURhdGEocGFyYW1zKSB8fCBmb3JjZUZvcm1EYXRhO1xuICAgIGNvbnN0IG5ld1BhcmFtcyA9IHByb2Nlc3NQYXJhbXMocGFyYW1zKTtcbiAgICBpZiAodXNlRm9ybURhdGEpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgT2JqZWN0LmtleXMobmV3UGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgQmxvYiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuZXdQYXJhbXNba2V5XSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgICAgICAgICAvKiBUbyBuYW1lIHRoZSBCbG9iOlxuICAgICAgICAgICAgICAgICAxLiBsb29rIHRvIGFuIGFsdGVybmF0ZSByZXF1ZXN0IHBhcmFtZXRlciBjYWxsZWQgJ2ZpbGVOYW1lJ1xuICAgICAgICAgICAgICAgICAyLiBzZWUgaWYgJ25hbWUnIGhhcyBiZWVuIHRhY2tlZCBvbnRvIHRoZSBCbG9iIG1hbnVhbGx5XG4gICAgICAgICAgICAgICAgIDMuIGlmIGFsbCBlbHNlIGZhaWxzLCB1c2UgdGhlIHJlcXVlc3QgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IG5ld1BhcmFtc1tcImZpbGVOYW1lXCJdIHx8IG5ld1BhcmFtc1trZXldLm5hbWUgfHwga2V5O1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIG5ld1BhcmFtc1trZXldLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBuZXdQYXJhbXNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5jb2RlUXVlcnlTdHJpbmcocGFyYW1zKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbmNvZGUtZm9ybS1kYXRhLmpzLm1hcCIsIi8qIENvcHlyaWdodCAoYykgMjAxNyBFbnZpcm9ubWVudGFsIFN5c3RlbXMgUmVzZWFyY2ggSW5zdGl0dXRlLCBJbmMuXG4gKiBBcGFjaGUtMi4wICovXG4vKipcbiAqIFRoaXMgcmVwcmVzZW50cyBhIGdlbmVyaWMgZXJyb3IgZnJvbSBhbiBBcmNHSVMgZW5kcG9pbnQuIFRoZXJlIHdpbGwgYmUgZGV0YWlscyBhYm91dCB0aGUgZXJyb3IgaW4gdGhlIHtAbGlua2NvZGUgQXJjR0lTUmVxdWVzdEVycm9yLm1lc3NhZ2V9LCAge0BsaW5rY29kZSBBcmNHSVNSZXF1ZXN0RXJyb3Iub3JpZ2luYWxNZXNzYWdlfSBwcm9wZXJ0aWVzIG9uIHRoZSBlcnJvci4gWW91XG4gKiBjYW4gYWxzbyBhY2Nlc3MgdGhlIG9yaWdpbmFsIHNlcnZlciByZXNwb25zZSBhdCAge0BsaW5rY29kZSBBcmNHSVNSZXF1ZXN0RXJyb3IucmVzcG9uc2V9IHdoaWNoIG1heSBoYXZlIGFkZGl0aW9uYWwgZGV0YWlscy5cbiAqXG4gKiBgYGBqc1xuICogcmVxdWVzdChzb21lVXJsLCBzb21lT3B0aW9ucykuY2F0Y2goZSA9PiB7XG4gKiAgIGlmKGUubmFtZSA9PT0gXCJBcmNHSVNSZXF1ZXN0RXJyb3JcIikge1xuICogICAgIGNvbnNvbGUubG9nKFwiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgcmVxdWVzdDpcIiwgZSk7XG4gKiAgICAgY29uc29sZS5sb2coXCJGdWxsIHNlcnZlciByZXNwb25zZVwiLCBlLnJlc3BvbnNlKTtcbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXJjR0lTUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBgQXJjR0lTUmVxdWVzdEVycm9yYCAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBBUElcbiAgICAgKiBAcGFyYW0gY29kZSAtIFRoZSBlcnJvciBjb2RlIGZyb20gdGhlIEFQSVxuICAgICAqIEBwYXJhbSByZXNwb25zZSAtIFRoZSBvcmlnaW5hbCByZXNwb25zZSBmcm9tIHRoZSBBUEkgdGhhdCBjYXVzZWQgdGhlIGVycm9yXG4gICAgICogQHBhcmFtIHVybCAtIFRoZSBvcmlnaW5hbCB1cmwgb2YgdGhlIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcmlnaW5hbCBvcHRpb25zIGFuZCBwYXJhbWV0ZXJzIG9mIHRoZSByZXF1ZXN0XG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgY29kZSwgcmVzcG9uc2UsIHVybCwgb3B0aW9ucykge1xuICAgICAgICAvLyAnRXJyb3InIGJyZWFrcyBwcm90b3R5cGUgY2hhaW4gaGVyZVxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgLy8gcmVzdG9yZSBwcm90b3R5cGUgY2hhaW4sIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MTEwMjA2MC90eXBlc2NyaXB0LWV4dGVuZGluZy1lcnJvci1jbGFzc1xuICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBPYmplY3Quc2V0UHJvdG90eXBlT2YgYXMgaW4gdGhlIGFuc3dlcnMgYmVjYXVzZSB3ZSBhcmUgRVMyMDE3IG5vdy5cbiAgICAgICAgLy8gQWxzbyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0LXdpa2kvYmxvYi9tYWluL0JyZWFraW5nLUNoYW5nZXMubWQjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIC8vIGFuZCBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvciNjdXN0b21fZXJyb3JfdHlwZXNcbiAgICAgICAgY29uc3QgYWN0dWFsUHJvdG8gPSBuZXcudGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIGFjdHVhbFByb3RvKTtcbiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJVTktOT1dOX0VSUk9SXCI7XG4gICAgICAgIGNvZGUgPSBjb2RlIHx8IFwiVU5LTk9XTl9FUlJPUl9DT0RFXCI7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQXJjR0lTUmVxdWVzdEVycm9yXCI7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9XG4gICAgICAgICAgICBjb2RlID09PSBcIlVOS05PV05fRVJST1JfQ09ERVwiID8gbWVzc2FnZSA6IGAke2NvZGV9OiAke21lc3NhZ2V9YDtcbiAgICAgICAgdGhpcy5vcmlnaW5hbE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFyY0dJU1JlcXVlc3RFcnJvci5qcy5tYXAiLCIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLy8gTm90ZTogY3VycmVudGx5IHRoaXMgaXMgYWxsIGludGVybmFsIHRvIHRoZSBwYWNrYWdlLCBhbmQgd2UgYXJlIG5vdCBleHBvc2luZ1xuLy8gYW55dGhpbmcgdGhhdCBhIHVzZXIgY2FuIHNldC4uLiBidXQgd2UgbmVlZCBhbGwgdGhpcyB0byBiZSBhYmxlIHRvIGVuc3VyZVxuLy8gdGhhdCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHBhY2thZ2UgY2FuIHNoYXJlIHRoZSBzYW1lIGNvbmZpZy5cbi8qKlxuICogVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgcmVxdWVzdCBtb2R1bGUuIFRoaXMgaXMgdXNlZCB0byBzdG9yZVxuICogdGhlIG5vLWNvcnMgZG9tYWlucyBhbmQgcGVuZGluZyByZXF1ZXN0cy5cbiAqL1xuY29uc3QgREVGQVVMVF9BUkNHSVNfUkVRVUVTVF9DT05GSUcgPSB7XG4gICAgbm9Db3JzRG9tYWluczogW10sXG4gICAgY3Jvc3NPcmlnaW5Ob0NvcnNEb21haW5zOiB7fSxcbiAgICBwZW5kaW5nTm9Db3JzUmVxdWVzdHM6IHt9XG59O1xuY29uc3QgR0xPQkFMX1ZBUklBQkxFX05BTUUgPSBcIkFSQ0dJU19SRVNUX0pTX05PX0NPUlNcIjtcbi8vIFNldCB0aGUgZ2xvYmFsIHZhcmlhYmxlIHRvIHRoZSBkZWZhdWx0IGNvbmZpZyBpZiBpdCBpcyBub3QgYWxlYWR5IGRlZmluZWRcbi8vIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCBhbGwgaW5zdGFuY2VzIG9mIHJlc3QtcmVxdWVzdCB3b3JrIHdpdGggYSBzaW5nbGVcbi8vIGluc3RhbmNlIG9mIHRoZSBjb25maWdcbmlmICghZ2xvYmFsVGhpc1tHTE9CQUxfVkFSSUFCTEVfTkFNRV0pIHtcbiAgICBnbG9iYWxUaGlzW0dMT0JBTF9WQVJJQUJMRV9OQU1FXSA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQVJDR0lTX1JFUVVFU1RfQ09ORklHKTtcbn1cbi8vIGV4cG9ydCB0aGUgc2V0dGluZ3MgYXMgaW1tdXRhYmxlIGNvbnN0cyB0aGF0IHJlYWQgZnJvbSB0aGUgZ2xvYmFsIGNvbmZpZ1xuZXhwb3J0IGNvbnN0IHJlcXVlc3RDb25maWcgPSBnbG9iYWxUaGlzW0dMT0JBTF9WQVJJQUJMRV9OQU1FXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVlc3RDb25maWcuanMubWFwIiwiaW1wb3J0IHsgcmVxdWVzdENvbmZpZyB9IGZyb20gXCIuLi9yZXF1ZXN0Q29uZmlnLmpzXCI7XG4vKipcbiAqIFNlbmQgYSBuby1jb3JzIHJlcXVlc3QgdG8gdGhlIHBhc3NlZCB1cmkuIFRoaXMgaXMgdXNlZCB0byBwaWNrIHVwXG4gKiBhIGNvb2tpZSBmcm9tIGEgM3JkIHBhcnR5IHNlcnZlciB0byBtZWV0IGEgcmVxdWlyZW1lbnQgb2Ygc29tZSBhdXRoZW50aWNhdGlvblxuICogZmxvd3MuXG4gKiBAcGFyYW0gdXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZE5vQ29yc1JlcXVlc3QodXJsKSB7XG4gICAgLy8gZHJvcCBhbnkgcXVlcnkgcGFyYW1zLCBvdGhlciB0aGFuIGY9anNvblxuICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICB1cmwgPSB1cmxPYmoub3JpZ2luICsgdXJsT2JqLnBhdGhuYW1lO1xuICAgIGlmICh1cmxPYmouc2VhcmNoLmluY2x1ZGVzKFwiZj1qc29uXCIpKSB7XG4gICAgICAgIHVybCArPSBcIj9mPWpzb25cIjtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luID0gdXJsT2JqLm9yaWdpbjtcbiAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgc2VudCBhIG5vLWNvcnMgcmVxdWVzdCB0byB0aGlzIHVybCwgcmV0dXJuIHRoZSBwcm9taXNlXG4gICAgLy8gc28gd2UgZG9uJ3Qgc2VuZCBtdWx0aXBsZSByZXF1ZXN0c1xuICAgIGlmIChyZXF1ZXN0Q29uZmlnLnBlbmRpbmdOb0NvcnNSZXF1ZXN0c1tvcmlnaW5dKSB7XG4gICAgICAgIHJldHVybiByZXF1ZXN0Q29uZmlnLnBlbmRpbmdOb0NvcnNSZXF1ZXN0c1tvcmlnaW5dO1xuICAgIH1cbiAgICAvLyBNYWtlIHRoZSByZXF1ZXN0IGFuZCBhZGQgdG8gdGhlIGNhY2hlXG4gICAgcmVxdWVzdENvbmZpZy5wZW5kaW5nTm9Db3JzUmVxdWVzdHNbb3JpZ2luXSA9IGZldGNoKHVybCwge1xuICAgICAgICBtb2RlOiBcIm5vLWNvcnNcIixcbiAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgICAgICBjYWNoZTogXCJuby1zdG9yZVwiXG4gICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIEFkZCB0byB0aGUgbGlzdCBvZiBjcm9zcy1vcmlnaW4gbm8tY29ycyBkb21haW5zXG4gICAgICAgIC8vIGlmIHRoZSBkb21haW4gaXMgbm90IGFscmVhZHkgaW4gdGhlIGxpc3RcbiAgICAgICAgaWYgKHJlcXVlc3RDb25maWcubm9Db3JzRG9tYWlucy5pbmRleE9mKG9yaWdpbikgPT09IC0xKSB7XG4gICAgICAgICAgICByZXF1ZXN0Q29uZmlnLm5vQ29yc0RvbWFpbnMucHVzaChvcmlnaW4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhvbGQgdGhlIHRpbWVzdGFtcCBvZiB0aGlzIHJlcXVlc3Qgc28gd2UgY2FuIGRlY2lkZSB3aGVuIHRvXG4gICAgICAgIC8vIHNlbmQgYW5vdGhlciByZXF1ZXN0IHRvIHRoaXMgZG9tYWluXG4gICAgICAgIHJlcXVlc3RDb25maWcuY3Jvc3NPcmlnaW5Ob0NvcnNEb21haW5zW29yaWdpbi50b0xvd2VyQ2FzZSgpXSA9IERhdGUubm93KCk7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgcGVuZGluZyByZXF1ZXN0IGZyb20gdGhlIGNhY2hlXG4gICAgICAgIGRlbGV0ZSByZXF1ZXN0Q29uZmlnLnBlbmRpbmdOb0NvcnNSZXF1ZXN0c1tvcmlnaW5dO1xuICAgICAgICAvLyBEdWUgdG8gbGltaXRhdGlvbnMgb2YgZmV0Y2hNb2NrIGF0IHRoZSB2ZXJzaW9uIG9mIHRoZSB0b29saW5nXG4gICAgICAgIC8vIGluIHRoaXMgcHJvamVjdCwgd2UgY2FuJ3QgbW9jayB0aGUgcmVzcG9uc2UgdHlwZSBvZiBhIG5vLWNvcnMgcmVxdWVzdFxuICAgICAgICAvLyBhbmQgdGh1cyB3ZSBjYW4ndCB0ZXN0IHRoaXMuIFNvIHdlIGFyZSBnb2luZyB0byBjb21tZW50IHRoaXMgb3V0XG4gICAgICAgIC8vIGFuZCBsZWF2ZSBpdCBpbiBwbGFjZSBmb3Igbm93LiBJZiB3ZSBuZWVkIHRvIHRlc3QgdGhpcywgd2UgY2FuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdG9vbGluZyB0byBhIHZlcnNpb24gdGhhdCBzdXBwb3J0cyB0aGlzLiBBbHNvXG4gICAgICAgIC8vIEpTIFNESyBkb2VzIG5vdCBkbyB0aGlzIGNoZWNrLCBzbyB3ZSBhcmUgZ29pbmcgdG8gbGVhdmUgaXQgb3V0IGZvciBub3cuXG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gbm8tY29ycyByZXF1ZXN0cyBhcmUgb3BhcXVlIHRvIGphdmFzY3JpcHRcbiAgICAgICAgLy8gYW5kIHRodXMgd2lsbCBhbHdheXMgcmV0dXJuIGEgcmVzcG9uc2Ugd2l0aCBhIHR5cGUgb2YgXCJvcGFxdWVcIlxuICAgICAgICAvLyBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJvcGFxdWVcIikge1xuICAgICAgICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAvLyBOb3Qgc3VyZSBpZiB0aGlzIGlzIHBvc3NpYmxlLCBidXQgc2luY2Ugd2UgaGF2ZSBhIGNoZWNrIGFib3ZlXG4gICAgICAgIC8vICAgLy8gbGV0cyBoYW5kbGUgdGhlIGVsc2UgY2FzZVxuICAgICAgICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgLy8gICAgIG5ldyBFcnJvcihgbm8tY29ycyByZXF1ZXN0IHRvICR7b3JpZ2lufSBub3Qgb3BhcXVlYClcbiAgICAgICAgLy8gICApO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgLy8gTm90IHN1cmUgdGhpcyBpcyBuZWNlc3NhcnksIGJ1dCBpZiB0aGUgcmVxdWVzdCBmYWlsc1xuICAgICAgICAvLyB3ZSBzaG91bGQgcmVtb3ZlIGl0IGZyb20gdGhlIHBlbmRpbmcgcmVxdWVzdHNcbiAgICAgICAgLy8gYW5kIHJldHVybiBhIHJlamVjdGVkIHByb21pc2Ugd2l0aCBzb21lIGluZm9ybWF0aW9uXG4gICAgICAgIGRlbGV0ZSByZXF1ZXN0Q29uZmlnLnBlbmRpbmdOb0NvcnNSZXF1ZXN0c1tvcmlnaW5dO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBuby1jb3JzIHJlcXVlc3QgdG8gJHtvcmlnaW59IGZhaWxlZGApKTtcbiAgICB9KTtcbiAgICAvLyByZXR1cm4gdGhlIHByb21pc2VcbiAgICByZXR1cm4gcmVxdWVzdENvbmZpZy5wZW5kaW5nTm9Db3JzUmVxdWVzdHNbb3JpZ2luXTtcbn1cbi8qKlxuICogQWxsb3cgdXMgdG8gZ2V0IHRoZSBuby1jb3JzIGRvbWFpbnMgdGhhdCBhcmUgcmVnaXN0ZXJlZFxuICogc28gd2UgY2FuIHBhc3MgdGhlbSBpbnRvIHRoZSBpZGVudGl0eSBtYW5hZ2VyXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZE5vQ29yc0RvbWFpbnMoKSB7XG4gICAgLy8gcmV0dXJuIHRoZSBuby1jb3JzIGRvbWFpbnNcbiAgICByZXR1cm4gcmVxdWVzdENvbmZpZy5ub0NvcnNEb21haW5zO1xufVxuLyoqXG4gKiBSZWdpc3RlciB0aGUgZG9tYWlucyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gbm8tY29ycyByZXF1ZXN0c1xuICogVGhpcyBpcyBjYWxsZWQgYnkgYHJlcXVlc3RgIHdoZW4gdGhlIHBvcnRhbC9zZWxmIHJlc3BvbnNlIGlzIGludGVyY2VwdGVkXG4gKiBhbmQgdGhlIGAuYXV0aG9yaXplZENyb3NzT3JpZ2luTm9Db3JzRG9tYWluc2AgcHJvcGVydHkgaXMgc2V0LlxuICogQHBhcmFtIGF1dGhvcml6ZWRDcm9zc09yaWdpbk5vQ29yc0RvbWFpbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTm9Db3JzRG9tYWlucyhhdXRob3JpemVkQ3Jvc3NPcmlnaW5Ob0NvcnNEb21haW5zKSB7XG4gICAgLy8gcmVnaXN0ZXIgdGhlIGRvbWFpbnNcbiAgICBhdXRob3JpemVkQ3Jvc3NPcmlnaW5Ob0NvcnNEb21haW5zLmZvckVhY2goKGRvbWFpbikgPT4ge1xuICAgICAgICAvLyBlbnN1cmUgZG9tYWluIGlzIGxvd2VyIGNhc2UgYW5kIGVuc3VyZSBwcm90b2NvbCBpcyBpbmNsdWRlZFxuICAgICAgICBkb21haW4gPSBkb21haW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKC9eaHR0cHM/OlxcL1xcLy8udGVzdChkb21haW4pKSB7XG4gICAgICAgICAgICBhZGROb0NvcnNEb21haW4oZG9tYWluKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vIHByb3RvY29sIHByZXNlbnQsIHNvIGFkZCBodHRwIGFuZCBodHRwc1xuICAgICAgICAgICAgYWRkTm9Db3JzRG9tYWluKFwiaHR0cDovL1wiICsgZG9tYWluKTtcbiAgICAgICAgICAgIGFkZE5vQ29yc0RvbWFpbihcImh0dHBzOi8vXCIgKyBkb21haW4pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEVuc3VyZSB3ZSBkb24ndCBnZXQgZHVwbGljYXRlIGRvbWFpbnMgaW4gdGhlIG5vLWNvcnMgZG9tYWlucyBsaXN0XG4gKiBAcGFyYW0gZG9tYWluXG4gKi9cbmZ1bmN0aW9uIGFkZE5vQ29yc0RvbWFpbih1cmwpIHtcbiAgICAvLyBTaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgYWx3YXlzIGVuc3VyZXMgYSBwcm90b2NvbCBpcyBwcmVzZW50XG4gICAgLy8gd2UgY2FuIHNhZmVseSB1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciB0byBnZXQgdGhlIG9yaWdpblxuICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIG5vLWNvcnMgZG9tYWlucyBsaXN0XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh1cmwpO1xuICAgIGNvbnN0IGRvbWFpbiA9IHVyaS5vcmlnaW47XG4gICAgaWYgKHJlcXVlc3RDb25maWcubm9Db3JzRG9tYWlucy5pbmRleE9mKGRvbWFpbikgPT09IC0xKSB7XG4gICAgICAgIHJlcXVlc3RDb25maWcubm9Db3JzRG9tYWlucy5wdXNoKGRvbWFpbik7XG4gICAgfVxufVxuLyoqXG4gKiAgSXMgdGhlIG9yaWdpbiBvZiB0aGUgcGFzc2VkIHVybCBpbiB0aGUgbm8tY29ycyBkb21haW5zIGxpc3Q/XG4gKiBAcGFyYW0gdXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb0NvcnNEb21haW4odXJsKSB7XG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuICAgIGlmIChyZXF1ZXN0Q29uZmlnLm5vQ29yc0RvbWFpbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGlzIHRoZSBjdXJyZW50IHVybCBpbiB0aGUgbm8tY29ycyBkb21haW5zP1xuICAgICAgICBjb25zdCBvcmlnaW4gPSBuZXcgVVJMKHVybCkub3JpZ2luLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJlc3VsdCA9IHJlcXVlc3RDb25maWcubm9Db3JzRG9tYWlucy5zb21lKChkb21haW4pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW4uaW5jbHVkZXMoZG9tYWluKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIElzIHRoZSBvcmlnaW4gb2YgdGhlIHBhc3NlZCB1cmwgaW4gdGhlIG5vLWNvcnMgZG9tYWlucyBsaXN0XG4gKiBhbmQgZG8gd2UgbmVlZCB0byBzZW5kIGEgbm8tY29ycyByZXF1ZXN0P1xuICpcbiAqIEBwYXJhbSB1cmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vQ29yc1JlcXVlc3RSZXF1aXJlZCh1cmwpIHtcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gICAgLy8gaXMgdGhlIGN1cnJlbnQgb3JpZ2luIGluIHRoZSBuby1jb3JzIGRvbWFpbnM/XG4gICAgaWYgKGlzTm9Db3JzRG9tYWluKHVybCkpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gbmV3IFVSTCh1cmwpLm9yaWdpbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIHNlbnQgYSBuby1jb3JzIHJlcXVlc3QgdG8gdGhpcyBkb21haW4gaW4gdGhlIGxhc3QgaG91clxuICAgICAgICBjb25zdCBsYXN0UmVxdWVzdCA9IHJlcXVlc3RDb25maWcuY3Jvc3NPcmlnaW5Ob0NvcnNEb21haW5zW29yaWdpbl0gfHwgMDtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSA2MCAqIDYwMDAwID4gbGFzdFJlcXVlc3QpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbmROb0NvcnNSZXF1ZXN0LmpzLm1hcCIsIi8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4IEVudmlyb25tZW50YWwgU3lzdGVtcyBSZXNlYXJjaCBJbnN0aXR1dGUsIEluYy5cbiAqIEFwYWNoZS0yLjAgKi9cbi8qKlxuICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSB0byBzdXJmYWNlIG1lc3NhZ2VzIHRvIGRldmVsb3BlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJuKG1lc3NhZ2UpIHtcbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsIFttZXNzYWdlXSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2Fybi5qcy5tYXAiLCJleHBvcnQgZnVuY3Rpb24gZ2V0RmV0Y2goKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgIGZldGNoOiBnbG9iYWxUaGlzLmZldGNoLFxuICAgIEhlYWRlcnM6IGdsb2JhbFRoaXMuSGVhZGVycyxcbiAgICBSZXNwb25zZTogZ2xvYmFsVGhpcy5SZXNwb25zZSxcbiAgICBSZXF1ZXN0OiBnbG9iYWxUaGlzLlJlcXVlc3RcbiAgfSk7XG59XG4iLCIvKipcbiAqIElzIHRoZSBnaXZlbiBVUkwgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IHdpbmRvdz9cbiAqIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZG8gYW55IGFkZGl0aW9uYWwgY3Jvc3Mtb3JpZ2luXG4gKiBoYW5kbGluZyBmb3IgdGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0gdXJsXG4gKiBAcGFyYW0gd2luIC0gb3B0aW9uYWwgd2luZG93IG9iamVjdCB0byB1c2UgZm9yIG9yaWdpbiBjb21wYXJpc29uXG4gKiAgICAgICAgICAgICAodXNlZnVsIGZvciB0ZXN0aW5nKVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZU9yaWdpbih1cmwsIHdpbikge1xuICAgIHZhciBfYTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICgoIXdpbiAmJiAhd2luZG93KSB8fCAhdXJsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHdpbiA9IHdpbiB8fCB3aW5kb3c7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IChfYSA9IHdpbi5sb2NhdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9yaWdpbjtcbiAgICAgICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKG9yaWdpbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNTYW1lT3JpZ2luLmpzLm1hcCIsIi8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4IEVudmlyb25tZW50YWwgU3lzdGVtcyBSZXNlYXJjaCBJbnN0aXR1dGUsIEluYy5cbiAqIEFwYWNoZS0yLjAgKi9cbmltcG9ydCB7IF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgZW5jb2RlRm9ybURhdGEgfSBmcm9tIFwiLi91dGlscy9lbmNvZGUtZm9ybS1kYXRhLmpzXCI7XG5pbXBvcnQgeyBlbmNvZGVRdWVyeVN0cmluZyB9IGZyb20gXCIuL3V0aWxzL2VuY29kZS1xdWVyeS1zdHJpbmcuanNcIjtcbmltcG9ydCB7IHJlcXVpcmVzRm9ybURhdGEgfSBmcm9tIFwiLi91dGlscy9wcm9jZXNzLXBhcmFtcy5qc1wiO1xuaW1wb3J0IHsgQXJjR0lTUmVxdWVzdEVycm9yIH0gZnJvbSBcIi4vdXRpbHMvQXJjR0lTUmVxdWVzdEVycm9yLmpzXCI7XG5pbXBvcnQgeyBpc05vQ29yc0RvbWFpbiwgaXNOb0NvcnNSZXF1ZXN0UmVxdWlyZWQsIHJlZ2lzdGVyTm9Db3JzRG9tYWlucywgc2VuZE5vQ29yc1JlcXVlc3QgfSBmcm9tIFwiLi91dGlscy9zZW5kTm9Db3JzUmVxdWVzdC5qc1wiO1xuaW1wb3J0IHsgd2FybiB9IGZyb20gXCIuL3V0aWxzL3dhcm4uanNcIjtcbmltcG9ydCB7IGdldEZldGNoIH0gZnJvbSBcIkBlc3JpL2FyY2dpcy1yZXN0LWZldGNoXCI7XG5pbXBvcnQgeyBpc1NhbWVPcmlnaW4gfSBmcm9tIFwiLi91dGlscy9pc1NhbWVPcmlnaW4uanNcIjtcbmV4cG9ydCBjb25zdCBOT0RFSlNfREVGQVVMVF9SRUZFUkVSX0hFQURFUiA9IGBAZXNyaS9hcmNnaXMtcmVzdC1qc2A7XG4vKipcbiAqIFNldHMgdGhlIGRlZmF1bHQgb3B0aW9ucyB0aGF0IHdpbGwgYmUgcGFzc2VkIGluICoqYWxsIHJlcXVlc3RzIGFjcm9zcyBhbGwgYEBlc3JpL2FyY2dpcy1yZXN0LWpzYCBtb2R1bGVzKiouXG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7IHNldERlZmF1bHRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gXCJAZXNyaS9hcmNnaXMtcmVzdC1yZXF1ZXN0XCI7XG4gKlxuICogc2V0RGVmYXVsdFJlcXVlc3RPcHRpb25zKHtcbiAqICAgYXV0aGVudGljYXRpb246IEFyY0dJU0lkZW50aXR5TWFuYWdlciAvLyBhbGwgcmVxdWVzdHMgd2lsbCB1c2UgdGhpcyBzZXNzaW9uIGJ5IGRlZmF1bHRcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBZb3Ugc2hvdWxkICoqbmV2ZXIqKiBzZXQgYSBkZWZhdWx0IGBhdXRoZW50aWNhdGlvbmAgd2hlbiB5b3UgYXJlIGluIGEgc2VydmVyIHNpZGUgZW52aXJvbm1lbnQgd2hlcmUgeW91IG1heSBiZSBoYW5kbGluZyByZXF1ZXN0cyBmb3IgbWFueSBkaWZmZXJlbnQgYXV0aGVudGljYXRlZCB1c2Vycy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgZGVmYXVsdCBvcHRpb25zIHRvIHBhc3Mgd2l0aCBldmVyeSByZXF1ZXN0LiBFeGlzdGluZyBkZWZhdWx0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gKiBAcGFyYW0gaGlkZVdhcm5pbmdzIFNpbGVuY2Ugd2FybmluZ3MgYWJvdXQgc2V0dGluZyBkZWZhdWx0IGBhdXRoZW50aWNhdGlvbmAgaW4gc2hhcmVkIGVudmlyb25tZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRSZXF1ZXN0T3B0aW9ucyhvcHRpb25zLCBoaWRlV2FybmluZ3MpIHtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiAhaGlkZVdhcm5pbmdzKSB7XG4gICAgICAgIHdhcm4oXCJZb3Ugc2hvdWxkIG5vdCBzZXQgYGF1dGhlbnRpY2F0aW9uYCBhcyBhIGRlZmF1bHQgaW4gYSBzaGFyZWQgZW52aXJvbm1lbnQgc3VjaCBhcyBhIHdlYiBzZXJ2ZXIgd2hpY2ggd2lsbCBwcm9jZXNzIG11bHRpcGxlIHVzZXJzIHJlcXVlc3RzLiBZb3UgY2FuIGNhbGwgYHNldERlZmF1bHRSZXF1ZXN0T3B0aW9uc2Agd2l0aCBgdHJ1ZWAgYXMgYSBzZWNvbmQgYXJndW1lbnQgdG8gZGlzYWJsZSB0aGlzIHdhcm5pbmcuXCIpO1xuICAgIH1cbiAgICBnbG9iYWxUaGlzLkRFRkFVTFRfQVJDR0lTX1JFUVVFU1RfT1BUSU9OUyA9IG9wdGlvbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFJlcXVlc3RPcHRpb25zKCkge1xuICAgIHJldHVybiAoZ2xvYmFsVGhpcy5ERUZBVUxUX0FSQ0dJU19SRVFVRVNUX09QVElPTlMgfHwge1xuICAgICAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBmOiBcImpzb25cIlxuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIFRoaXMgZXJyb3IgaXMgdGhyb3duIHdoZW4gYSByZXF1ZXN0IGVuY291bnRlcnMgYW4gaW52YWxpZCB0b2tlbiBlcnJvci4gUmVxdWVzdHMgdGhhdCB1c2Uge0BsaW5rY29kZSBBcmNHSVNJZGVudGl0eU1hbmFnZXJ9IG9yXG4gKiB7QGxpbmtjb2RlIEFwcGxpY2F0aW9uQ3JlZGVudGlhbHNNYW5hZ2VyfSBpbiB0aGUgYGF1dGhlbnRpY2F0aW9uYCBvcHRpb24gdGhlIGF1dGhlbnRpY2F0aW9uIG1hbmFnZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHRyeSB0byBnZW5lcmF0ZVxuICogYSBmcmVzaCB0b2tlbiB1c2luZyBlaXRoZXIge0BsaW5rY29kZSBBcmNHSVNJZGVudGl0eU1hbmFnZXIucmVmcmVzaENyZWRlbnRpYWxzfSBvclxuICoge0BsaW5rY29kZSBBcHBsaWNhdGlvbkNyZWRlbnRpYWxzTWFuYWdlci5yZWZyZXNoQ3JlZGVudGlhbHN9LiBJZiB0aGUgcmVxdWVzdCB3aXRoIHRoZSBuZXcgdG9rZW4gZmFpbHMgeW91IHdpbGwgcmVjZWl2ZSBhbiBgQXJjR0lTQXV0aEVycm9yYFxuICogaWYgcmVmcmVzaGluZyB0aGUgdG9rZW4gZmFpbHMgeW91IHdpbGwgcmVjZWl2ZSBhbiBpbnN0YW5jZSBvZiB7QGxpbmtjb2RlIEFyY0dJU1Rva2VuUmVxdWVzdEVycm9yfS5cbiAqXG4gKiBgYGBqc1xuICogcmVxdWVzdChzb21lVXJsLCB7XG4gKiAgIGF1dGhlbnRpY2F0aW9uOiBpZGVudGl0eU1hbmFnZXIsXG4gKiAgIC8vIHNvbWUgYWRkaXRpb25hbCBvcHRpb25zLi4uXG4gKiB9KS5jYXRjaChlID0+IHtcbiAqICAgaWYoZS5uYW1lID09PSBcIkFyY0dJU0F1dGhFcnJvclwiKSB7XG4gKiAgICAgY29uc29sZS5sb2coXCJSZXF1ZXN0IHdpdGggYSBuZXcgdG9rZW4gZmFpbGVkIHlvdSBtaWdodCB3YW50IHRvIGhhdmUgdGhlIHVzZXIgYXV0aG9yaXplIGFnYWluLlwiKVxuICogICB9XG4gKlxuICogICBpZihlLm5hbWUgPT09IFwiQXJjR0lTVG9rZW5SZXF1ZXN0RXJyb3JcIikge1xuICogICAgIGNvbnNvbGUubG9nKFwiVGhlcmUgd2FzIGFuIGVycm9yIHJlZnJlc2hpbmcgdGhlIHRva2VuIHlvdSBtaWdodCB3YW50IHRvIGhhdmUgdGhlIHVzZXIgYXV0aG9yaXplIGFnYWluLlwiKVxuICogICB9XG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBcmNHSVNBdXRoRXJyb3IgZXh0ZW5kcyBBcmNHSVNSZXF1ZXN0RXJyb3Ige1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBgQXJjR0lTQXV0aEVycm9yYCAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBBUElcbiAgICAgKiBAcGFyYW0gY29kZSAtIFRoZSBlcnJvciBjb2RlIGZyb20gdGhlIEFQSVxuICAgICAqIEBwYXJhbSByZXNwb25zZSAtIFRoZSBvcmlnaW5hbCByZXNwb25zZSBmcm9tIHRoZSBBUEkgdGhhdCBjYXVzZWQgdGhlIGVycm9yXG4gICAgICogQHBhcmFtIHVybCAtIFRoZSBvcmlnaW5hbCB1cmwgb2YgdGhlIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcmlnaW5hbCBvcHRpb25zIG9mIHRoZSByZXF1ZXN0XG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSA9IFwiQVVUSEVOVElDQVRJT05fRVJST1JcIiwgY29kZSA9IFwiQVVUSEVOVElDQVRJT05fRVJST1JfQ09ERVwiLCByZXNwb25zZSwgdXJsLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGNvZGUsIHJlc3BvbnNlLCB1cmwsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFyY0dJU0F1dGhFcnJvclwiO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPVxuICAgICAgICAgICAgY29kZSA9PT0gXCJBVVRIRU5USUNBVElPTl9FUlJPUl9DT0RFXCIgPyBtZXNzYWdlIDogYCR7Y29kZX06ICR7bWVzc2FnZX1gO1xuICAgICAgICAvLyByZXN0b3JlIHByb3RvdHlwZSBjaGFpbiwgc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQxMTAyMDYwL3R5cGVzY3JpcHQtZXh0ZW5kaW5nLWVycm9yLWNsYXNzXG4gICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIE9iamVjdC5zZXRQcm90b3R5cGVPZiBhcyBpbiB0aGUgYW5zd2VycyBiZWNhdXNlIHdlIGFyZSBFUzIwMTcgbm93LlxuICAgICAgICAvLyBBbHNvIHNlZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQtd2lraS9ibG9iL21haW4vQnJlYWtpbmctQ2hhbmdlcy5tZCNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAgICAgLy8gYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI2N1c3RvbV9lcnJvcl90eXBlc1xuICAgICAgICBjb25zdCBhY3R1YWxQcm90byA9IG5ldy50YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgYWN0dWFsUHJvdG8pO1xuICAgIH1cbiAgICByZXRyeShnZXRTZXNzaW9uLCByZXRyeUxpbWl0ID0gMSkge1xuICAgICAgICBsZXQgdHJpZXMgPSAwO1xuICAgICAgICBjb25zdCByZXRyeVJlcXVlc3QgPSAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0cmllcyA9IHRyaWVzICsgMTtcbiAgICAgICAgICAgIGdldFNlc3Npb24odGhpcy51cmwsIHRoaXMub3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbigoc2Vzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucyksIHsgYXV0aGVudGljYXRpb246IHNlc3Npb24gfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsUmVxdWVzdCh0aGlzLnVybCwgbmV3T3B0aW9ucyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5uYW1lID09PSBcIkFyY0dJU0F1dGhFcnJvclwiICYmIHRyaWVzIDwgcmV0cnlMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICByZXRyeVJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5uYW1lID09PSB0aGlzLm5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgZS5tZXNzYWdlID09PSB0aGlzLm1lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgdHJpZXMgPj0gcmV0cnlMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICByZXRyeVJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBDaGVja3MgZm9yIGVycm9ycyBpbiBhIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQXJjR0lTIFJFU1QgQVBJLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCBpdCB3aWxsIHJldHVybiB0aGUgYGRhdGFgIHBhc3NlZCBpbi4gSWYgdGhlcmUgaXMgYW4gZXJyb3IsIGl0IHdpbGwgdGhyb3cgYW4gYEFyY0dJU1JlcXVlc3RFcnJvcmAgb3IgYEFyY0dJU0F1dGhFcnJvcmAuXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIHJlc3BvbnNlIEpTT04gdG8gY2hlY2sgZm9yIGVycm9ycy5cbiAqIEBwYXJhbSB1cmwgVGhlIHVybCBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdFxuICogQHBhcmFtIHBhcmFtcyBUaGUgcGFyYW1ldGVycyBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdFxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgb2YgdGhlIG9yaWdpbmFsIHJlcXVlc3RcbiAqIEByZXR1cm5zIFRoZSBkYXRhIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYGRhdGFgIHBhcmFtZXRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tGb3JFcnJvcnMocmVzcG9uc2UsIHVybCwgcGFyYW1zLCBvcHRpb25zLCBvcmlnaW5hbEF1dGhFcnJvcikge1xuICAgIC8vIHRoaXMgaXMgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIGJpbGxpbmcuYXJjZ2lzLmNvbSBiYWNrZW5kXG4gICAgaWYgKHJlc3BvbnNlLmNvZGUgPj0gNDAwKSB7XG4gICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgY29kZSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBBcmNHSVNSZXF1ZXN0RXJyb3IobWVzc2FnZSwgY29kZSwgcmVzcG9uc2UsIHVybCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIGVycm9yIGZyb20gQXJjR0lTIE9ubGluZSBvciBhbiBBcmNHSVMgUG9ydGFsIG9yIHNlcnZlciBpbnN0YW5jZS5cbiAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBjb2RlLCBtZXNzYWdlQ29kZSB9ID0gcmVzcG9uc2UuZXJyb3I7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IG1lc3NhZ2VDb2RlIHx8IGNvZGUgfHwgXCJVTktOT1dOX0VSUk9SX0NPREVcIjtcbiAgICAgICAgaWYgKGNvZGUgPT09IDQ5OCB8fCBjb2RlID09PSA0OTkpIHtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbEF1dGhFcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG9yaWdpbmFsQXV0aEVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyY0dJU0F1dGhFcnJvcihtZXNzYWdlLCBlcnJvckNvZGUsIHJlc3BvbnNlLCB1cmwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBBcmNHSVNSZXF1ZXN0RXJyb3IobWVzc2FnZSwgZXJyb3JDb2RlLCByZXNwb25zZSwgdXJsLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLy8gZXJyb3IgZnJvbSBhIHN0YXR1cyBjaGVja1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IFwiZmFpbGVkXCIgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSBcImZhaWx1cmVcIikge1xuICAgICAgICBsZXQgbWVzc2FnZTtcbiAgICAgICAgbGV0IGNvZGUgPSBcIlVOS05PV05fRVJST1JfQ09ERVwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2UocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSkubWVzc2FnZTtcbiAgICAgICAgICAgIGNvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpLmNvZGU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSByZXNwb25zZS5zdGF0dXNNZXNzYWdlIHx8IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEFyY0dJU1JlcXVlc3RFcnJvcihtZXNzYWdlLCBjb2RlLCByZXNwb25zZSwgdXJsLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufVxuLyoqXG4gKiBUaGlzIGlzIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBgcmVxdWVzdGAgd2l0aG91dCB0aGUgYXV0b21hdGljIHJldHJ5IGJlaGF2aW9yIHRvIHByZXZlbnRcbiAqIGluZmluaXRlIGxvb3BzIHdoZW4gYSBzZXJ2ZXIgY29udGludWVzIHRvIHJldHVybiBpbnZhbGlkIHRva2VuIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCBvZiB0aGUgQXJjR0lTIFJFU1QgQVBJIGVuZHBvaW50LlxuICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3QsIGluY2x1ZGluZyBwYXJhbWV0ZXJzIHJlbGV2YW50IHRvIHRoZSBlbmRwb2ludC5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSB3aXRoIHRoZSBkYXRhIGZyb20gdGhlIHJlc3BvbnNlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcm5hbFJlcXVlc3QodXJsLCByZXF1ZXN0T3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gZ2V0RGVmYXVsdFJlcXVlc3RPcHRpb25zKCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIgfSwgZGVmYXVsdHMpLCByZXF1ZXN0T3B0aW9ucyksIHtcbiAgICAgICAgcGFyYW1zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLnBhcmFtcyksIHJlcXVlc3RPcHRpb25zLnBhcmFtcyksXG4gICAgICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMuaGVhZGVycyksIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMpXG4gICAgfSk7XG4gICAgY29uc3QgeyBodHRwTWV0aG9kLCByYXdSZXNwb25zZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHsgZjogXCJqc29uXCIgfSwgb3B0aW9ucy5wYXJhbXMpO1xuICAgIGxldCBvcmlnaW5hbEF1dGhFcnJvciA9IG51bGw7XG4gICAgY29uc3QgZmV0Y2hPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6IGh0dHBNZXRob2QsXG4gICAgICAgIHNpZ25hbDogb3B0aW9ucy5zaWduYWwsXG4gICAgICAgIC8qIGVuc3VyZXMgYmVoYXZpb3IgbWltaWNzIFhNTEh0dHBSZXF1ZXN0LlxuICAgICAgICBuZWVkZWQgdG8gc3VwcG9ydCBzZW5kaW5nIElXQSBjb29raWVzICovXG4gICAgICAgIGNyZWRlbnRpYWxzOiBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IFwic2FtZS1vcmlnaW5cIlxuICAgIH07XG4gICAgLy8gSXMgdGhpcyBhIG5vLWNvcnMgZG9tYWluPyBpZiBzbyB3ZSBuZWVkIHRvIHNldCBjcmVkZW50aWFscyB0byBpbmNsdWRlXG4gICAgaWYgKGlzTm9Db3JzRG9tYWluKHVybCkpIHtcbiAgICAgICAgZmV0Y2hPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJpbmNsdWRlXCI7XG4gICAgfVxuICAgIC8vIHRoZSAvb2F1dGgyL3BsYXRmb3JtU2VsZiByb3V0ZSB3aWxsIGFkZCBYLUVzcmktQXV0aC1DbGllbnQtSWQgaGVhZGVyXG4gICAgLy8gYW5kIHRoYXQgcmVxdWVzdCBuZWVkcyB0byBzZW5kIGNvb2tpZXMgY3Jvc3MgZG9tYWluXG4gICAgLy8gc28gd2UgbmVlZCB0byBzZXQgdGhlIGNyZWRlbnRpYWxzIHRvIFwiaW5jbHVkZVwiXG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycyAmJlxuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJYLUVzcmktQXV0aC1DbGllbnQtSWRcIl0gJiZcbiAgICAgICAgdXJsLmluZGV4T2YoXCIvb2F1dGgyL3BsYXRmb3JtU2VsZlwiKSA+IC0xKSB7XG4gICAgICAgIGZldGNoT3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH1cbiAgICBsZXQgYXV0aGVudGljYXRpb247XG4gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSByYXcgdG9rZW4gYXMgYSBzdHJpbmcgYW5kIGNyZWF0ZSBhIElBdXRoZW50aWNhdGlvbk1hbmFnZXIgbGlrZSBvYmplY3QgZm9yIGl0LlxuICAgIC8vIE90aGVyd2lzZSB0aGlzIGp1c3QgYXNzdW1lcyB0aGF0IG9wdGlvbnMuYXV0aGVudGljYXRpb24gaXMgYW4gSUF1dGhlbnRpY2F0aW9uTWFuYWdlci5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgcmF3VG9rZW4gPSBvcHRpb25zLmF1dGhlbnRpY2F0aW9uO1xuICAgICAgICBhdXRoZW50aWNhdGlvbiA9IHtcbiAgICAgICAgICAgIHBvcnRhbDogXCJodHRwczovL3d3dy5hcmNnaXMuY29tL3NoYXJpbmcvcmVzdFwiLFxuICAgICAgICAgICAgZ2V0VG9rZW46ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJhd1Rva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSB3ZSBkb24ndCBuZWVkIHRvIHRlc3QgTk9UIHdhcm5pbmcgcGVvcGxlICovXG4gICAgICAgIGlmICghb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5zdGFydHNXaXRoKFwiQUFQS1wiKSAmJlxuICAgICAgICAgICAgIW9wdGlvbnMuYXV0aGVudGljYXRpb24uc3RhcnRzV2l0aChcIkFBVEtcIikgJiYgLy8gZG9lc24ndCBsb29rIGxpa2UgYW4gQVBJIEtleVxuICAgICAgICAgICAgIW9wdGlvbnMuc3VwcHJlc3NXYXJuaW5ncyAmJiAvLyB1c2VyIGRvZXNuJ3Qgd2FudCB0byBzdXBwcmVzcyB3YXJuaW5ncyBmb3IgdGhpcyByZXF1ZXN0XG4gICAgICAgICAgICAhZ2xvYmFsVGhpcy5BUkNHSVNfUkVTVF9KU19TVVBQUkVTU19UT0tFTl9XQVJOSU5HIC8vIHdlIGhhdmVuJ3Qgc2hvd24gdGhlIHVzZXIgdGhpcyB3YXJuaW5nIHlldFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHdhcm4oYFVzaW5nIGFuIG9BdXRoIDIuMCBhY2Nlc3MgdG9rZW4gZGlyZWN0bHkgaW4gdGhlIHRva2VuIG9wdGlvbiBpcyBkaXNjb3VyYWdlZC4gQ29uc2lkZXIgdXNpbmcgQXJjR0lTSWRlbnRpdHlNYW5hZ2VyIG9yIEFwcGxpY2F0aW9uIHNlc3Npb24uIFNlZSBodHRwczovL2Vzcml1cmwuY29tL2FyY2dpcy1yZXN0LWpzLWRpcmVjdC10b2tlbi13YXJuaW5nIGZvciBtb3JlIGluZm9ybWF0aW9uLmApO1xuICAgICAgICAgICAgZ2xvYmFsVGhpcy5BUkNHSVNfUkVTVF9KU19TVVBQUkVTU19UT0tFTl9XQVJOSU5HID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXV0aGVudGljYXRpb24gPSBvcHRpb25zLmF1dGhlbnRpY2F0aW9uO1xuICAgIH1cbiAgICAvLyBmb3IgZXJyb3JzIGluIEdFVCByZXF1ZXN0cyB3ZSB3YW50IHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBlcnJvciB0byBiZSB0aGUgVVJMIGJlZm9yZVxuICAgIC8vIHF1ZXJ5IHBhcmFtcyBhcmUgYXBwbGllZC5cbiAgICBjb25zdCBvcmlnaW5hbFVybCA9IHVybDtcbiAgICAvLyBkZWZhdWx0IHRvIGZhbHNlLCBmb3Igbm9kZWpzXG4gICAgbGV0IHNhbWVPcmlnaW4gPSBmYWxzZTtcbiAgICAvLyBpZiB3ZSBhcmUgaW4gYSBicm93c2VyLCBjaGVjayBpZiB0aGUgdXJsIGlzIHNhbWUgb3JpZ2luXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBzYW1lT3JpZ2luID0gaXNTYW1lT3JpZ2luKHVybCk7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVpcmVzTm9Db3JzID0gIXNhbWVPcmlnaW4gJiYgaXNOb0NvcnNSZXF1ZXN0UmVxdWlyZWQodXJsKTtcbiAgICAvLyB0aGUgL29hdXRoMi9wbGF0Zm9ybVNlbGYgcm91dGUgd2lsbCBhZGQgWC1Fc3JpLUF1dGgtQ2xpZW50LUlkIGhlYWRlclxuICAgIC8vIGFuZCB0aGF0IHJlcXVlc3QgbmVlZHMgdG8gc2VuZCBjb29raWVzIGNyb3NzIGRvbWFpblxuICAgIC8vIHNvIHdlIG5lZWQgdG8gc2V0IHRoZSBjcmVkZW50aWFscyB0byBcImluY2x1ZGVcIlxuICAgIGlmIChvcHRpb25zLmhlYWRlcnMgJiZcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiWC1Fc3JpLUF1dGgtQ2xpZW50LUlkXCJdICYmXG4gICAgICAgIHVybC5pbmRleE9mKFwiL29hdXRoMi9wbGF0Zm9ybVNlbGZcIikgPiAtMSkge1xuICAgICAgICBmZXRjaE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9XG4gICAgLy8gU2ltcGxlIGZpcnN0IHByb21pc2UgdGhhdCB3ZSBtYXkgdHVybiBpbnRvIHRoZSBuby1jb3JzIHJlcXVlc3RcbiAgICBsZXQgZmlyc3RQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKHJlcXVpcmVzTm9Db3JzKSB7XG4gICAgICAgIC8vIGVuc3VyZSB3ZSBzZW5kIGNvb2tpZXMgb24gdGhlIHJlcXVlc3QgYWZ0ZXJcbiAgICAgICAgZmV0Y2hPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJpbmNsdWRlXCI7XG4gICAgICAgIGZpcnN0UHJvbWlzZSA9IHNlbmROb0NvcnNSZXF1ZXN0KHVybCk7XG4gICAgfVxuICAgIHJldHVybiBmaXJzdFByb21pc2VcbiAgICAgICAgLnRoZW4oKCkgPT4gYXV0aGVudGljYXRpb25cbiAgICAgICAgPyBhdXRoZW50aWNhdGlvbi5nZXRUb2tlbih1cmwpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogYXBwZW5kIG9yaWdpbmFsIHJlcXVlc3QgdXJsIGFuZCByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgICAgICogdG8gdGhlIGVycm9yIHRocm93biBieSBnZXRUb2tlbigpXG4gICAgICAgICAgICAgKiB0byBhc3Npc3Qgd2l0aCByZXRyeWluZ1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlcnIudXJsID0gdXJsO1xuICAgICAgICAgICAgZXJyLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBpZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdGFsayB0byBhbiB1bmZlZGVyYXRlZCBzZXJ2ZXJcbiAgICAgICAgICAgICAqIGZpcnN0IHRyeSB0aGUgcmVxdWVzdCBhbm9ueW1vdXNseS4gaWYgYSAndG9rZW4gcmVxdWlyZWQnXG4gICAgICAgICAgICAgKiBlcnJvciBpcyB0aHJvd24sIHRocm93IHRoZSBVTkZFREVSQVRFRCBlcnJvciB0aGVuLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBvcmlnaW5hbEF1dGhFcnJvciA9IGVycjtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG4gICAgICAgIH0pXG4gICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKFwiXCIpKVxuICAgICAgICAudGhlbigodG9rZW4pID0+IHtcbiAgICAgICAgaWYgKHRva2VuLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyYW1zLnRva2VuID0gdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1dGhlbnRpY2F0aW9uICYmIGF1dGhlbnRpY2F0aW9uLmdldERvbWFpbkNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICBmZXRjaE9wdGlvbnMuY3JlZGVudGlhbHMgPSBhdXRoZW50aWNhdGlvbi5nZXREb21haW5DcmVkZW50aWFscyh1cmwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEN1c3RvbSBoZWFkZXJzIHRvIGFkZCB0byByZXF1ZXN0LiBJUmVxdWVzdE9wdGlvbnMuaGVhZGVycyB3aXRoIG1lcmdlIG92ZXIgcmVxdWVzdEhlYWRlcnMuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgICAgIGlmIChmZXRjaE9wdGlvbnMubWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50cyB0b2tlbiBmcm9tIGJlaW5nIHBhc3NlZCBpbiBxdWVyeSBwYXJhbXMgd2hlbiBoaWRlVG9rZW4gb3B0aW9uIGlzIHVzZWQuXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgLSB3aW5kb3cgaXMgYWx3YXlzIGRlZmluZWQgaW4gYSBicm93c2VyLiBUZXN0IGNhc2UgaXMgY292ZXJlZCBieSBKYXNtaW5lIGluIG5vZGUgdGVzdCAqL1xuICAgICAgICAgICAgaWYgKHBhcmFtcy50b2tlbiAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaGlkZVRva2VuICYmXG4gICAgICAgICAgICAgICAgLy8gU2hhcmluZyBBUEkgZG9lcyBub3Qgc3VwcG9ydCBwcmVmbGlnaHQgY2hlY2sgcmVxdWlyZWQgYnkgbW9kZXJuIGJyb3dzZXJzIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvUHJlZmxpZ2h0X3JlcXVlc3RcbiAgICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNbXCJYLUVzcmktQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHtwYXJhbXMudG9rZW59YDtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLnRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZW5jb2RlIHRoZSBwYXJhbWV0ZXJzIGludG8gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBlbmNvZGVRdWVyeVN0cmluZyhwYXJhbXMpO1xuICAgICAgICAgICAgLy8gZG9udCBhcHBlbmQgYSAnPycgdW5sZXNzIHBhcmFtZXRlcnMgYXJlIGFjdHVhbGx5IHByZXNlbnRcbiAgICAgICAgICAgIGNvbnN0IHVybFdpdGhRdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zID09PSBcIlwiID8gdXJsIDogdXJsICsgXCI/XCIgKyBlbmNvZGVRdWVyeVN0cmluZyhwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gVGhpcyB3b3VsZCBleGNlZWQgdGhlIG1heGltdW0gbGVuZ3RoIGZvciBVUkxzIGJ5IDIwMDAgYXMgZGVmYXVsdCBvciBhcyBzcGVjaWZpZWQgYnkgdGhlIGNvbnN1bWVyIGFuZCByZXF1aXJlcyBQT1NUXG4gICAgICAgICAgICAob3B0aW9ucy5tYXhVcmxMZW5ndGggJiZcbiAgICAgICAgICAgICAgICB1cmxXaXRoUXVlcnlTdHJpbmcubGVuZ3RoID4gb3B0aW9ucy5tYXhVcmxMZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgKCFvcHRpb25zLm1heFVybExlbmd0aCAmJiB1cmxXaXRoUXVlcnlTdHJpbmcubGVuZ3RoID4gMjAwMCkgfHxcbiAgICAgICAgICAgICAgICAvLyBPciBpZiB0aGUgY3VzdG9tZXIgcmVxdWlyZXMgdGhlIHRva2VuIHRvIGJlIGhpZGRlbiBhbmQgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gaGlkZGVuIGluIHRoZSBoZWFkZXIgKGZvciBicm93c2VycylcbiAgICAgICAgICAgICAgICAocGFyYW1zLnRva2VuICYmIG9wdGlvbnMuaGlkZVRva2VuKSkge1xuICAgICAgICAgICAgICAgIC8vIHRoZSBjb25zdW1lciBzcGVjaWZpZWQgYSBtYXhpbXVtIGxlbmd0aCBmb3IgVVJMc1xuICAgICAgICAgICAgICAgIC8vIGFuZCB0aGlzIHdvdWxkIGV4Y2VlZCBpdCwgc28gdXNlIHBvc3QgaW5zdGVhZFxuICAgICAgICAgICAgICAgIGZldGNoT3B0aW9ucy5tZXRob2QgPSBcIlBPU1RcIjtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdG9rZW4gd2FzIGFscmVhZHkgYWRkZWQgYXMgYSBBdXRoIGhlYWRlciwgYWRkIHRoZSB0b2tlbiBiYWNrIHRvIGJvZHkgd2l0aCBvdGhlciBwYXJhbXMgaW5zdGVhZCBvZiBoZWFkZXJcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4ubGVuZ3RoICYmIG9wdGlvbnMuaGlkZVRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50b2tlbiA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZXhpc3RpbmcgaGVhZGVyIHRoYXQgd2FzIGFkZGVkIGJlZm9yZSB1cmwgcXVlcnkgbGVuZ3RoIHdhcyBjaGVja2VkXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1tcIlgtRXNyaS1BdXRob3JpemF0aW9uXCJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGp1c3QgdXNlIEdFVFxuICAgICAgICAgICAgICAgIHVybCA9IHVybFdpdGhRdWVyeVN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiB1cGRhdGVSZXNvdXJjZXMgY3VycmVudGx5IHJlcXVpcmVzIEZvcm1EYXRhIGV2ZW4gd2hlbiB0aGUgaW5wdXQgcGFyYW1ldGVycyBkb250IHdhcnJhbnQgaXQuXG4gICAgaHR0cHM6Ly9kZXZlbG9wZXJzLmFyY2dpcy5jb20vcmVzdC91c2Vycy1ncm91cHMtYW5kLWl0ZW1zL3VwZGF0ZS1yZXNvdXJjZXMuaHRtXG4gICAgICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vRXNyaS9hcmNnaXMtcmVzdC1qcy9wdWxsLzUwMCBmb3IgbW9yZSBpbmZvLiAqL1xuICAgICAgICBjb25zdCBmb3JjZUZvcm1EYXRhID0gbmV3IFJlZ0V4cChcIi9pdGVtcy8uKy91cGRhdGVSZXNvdXJjZXNcIikudGVzdCh1cmwpO1xuICAgICAgICBpZiAoZmV0Y2hPcHRpb25zLm1ldGhvZCA9PT0gXCJQT1NUXCIpIHtcbiAgICAgICAgICAgIGZldGNoT3B0aW9ucy5ib2R5ID0gZW5jb2RlRm9ybURhdGEocGFyYW1zLCBmb3JjZUZvcm1EYXRhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNaXhpbiBoZWFkZXJzIGZyb20gcmVxdWVzdCBvcHRpb25zXG4gICAgICAgIGZldGNoT3B0aW9ucy5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXF1ZXN0SGVhZGVycyksIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgY29uZGl0aW9uYWwgZm9yIE5vZGUgSlMgYXMgQXJjR0lTSWRlbnRpdHlNYW5hZ2VyLnJlZnJlc2hXaXRoVXNlcm5hbWVBbmRQYXNzd29yZCgpXG4gICAgICAgIC8vIHRvIGVuc3VyZSB0aGF0IGdlbmVyYXRlZCB0b2tlbnMgaGF2ZSB0aGUgc2FtZSByZWZlcmVyIHdoZW4gdXNlZCBpbiBOb2RlIHdpdGggYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0ga2FybWEgcmVwb3J0cyBjb3ZlcmFnZSBvbiBicm93c2VyIHRlc3RzIG9ubHkgKi9cbiAgICAgICAgaWYgKCh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgICAgICAod2luZG93ICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpKSAmJlxuICAgICAgICAgICAgIWZldGNoT3B0aW9ucy5oZWFkZXJzLnJlZmVyZXIpIHtcbiAgICAgICAgICAgIGZldGNoT3B0aW9ucy5oZWFkZXJzLnJlZmVyZXIgPSBOT0RFSlNfREVGQVVMVF9SRUZFUkVSX0hFQURFUjtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSBibG9iIHJlc3BvbnNlcyBhcmUgZGlmZmljdWx0IHRvIG1ha2UgY3Jvc3MgcGxhdGZvcm0gd2Ugd2lsbCBqdXN0IGhhdmUgdG8gdHJ1c3QgdGhlIGlzb21vcnBoaWMgZmV0Y2ggd2lsbCBkbyBpdHMgam9iICovXG4gICAgICAgIGlmICghcmVxdWlyZXNGb3JtRGF0YShwYXJhbXMpICYmICFmb3JjZUZvcm1EYXRhKSB7XG4gICAgICAgICAgICBmZXRjaE9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9XG4gICAgICAgICAgICAgICAgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2sgZm9yIGEgZ2xvYmFsIGZldGNoIGZpcnN0IGFuZCB1c2UgaXQgaWYgYXZhaWxhYmxlLiBUaGlzIGFsbG93cyB1cyB0byB1c2UgdGhlIGRlZmF1bHRcbiAgICAgICAgICogY29uZmlndXJhdGlvbiBvZiBmZXRjaC1tb2NrIGluIHRlc3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgY292ZXJhZ2UgaXMgYmFzZWQgb24gYnJvd3NlciBjb2RlIGFuZCB3ZSBkb24ndCB0ZXN0IGZvciB0aGUgYWJzZW5jZSBvZiBnbG9iYWwgZmV0Y2ggc28gd2UgY2FuIHNraXAgdGhlIGVsc2UgaGVyZS4gKi9cbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXMuZmV0Y2hcbiAgICAgICAgICAgID8gZ2xvYmFsVGhpcy5mZXRjaCh1cmwsIGZldGNoT3B0aW9ucylcbiAgICAgICAgICAgIDogZ2V0RmV0Y2goKS50aGVuKCh7IGZldGNoIH0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2godXJsLCBmZXRjaE9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIHRoZSByZXF1ZXN0IGdvdCBiYWNrIGFuIGVycm9yIHN0YXR1cyBjb2RlICg0eHgsIDV4eClcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHNlcnZlciByZXR1cm5lZCBhIEpTT04gYm9keSB3aXRoIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZvcm1hdCB1c2VkIGJ5IG5ld2VyIHNlcnZpY2VzIHN1Y2ggYXMgdGhlIFBsYWNlcyBhbmQgU3R5bGUgc2VydmljZS5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICAgICAgICAgIC5qc29uKClcbiAgICAgICAgICAgICAgICAudGhlbigoanNvbkVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGJvZHkgY2FuIGJlIHBhcnNlZCBhcyBKU09OXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0dXMsIHN0YXR1c1RleHQgfSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgZGV0YWlscyB9ID0ganNvbkVycm9yLmVycm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBgJHttZXNzYWdlfS4gJHtkZXRhaWxzID8gZGV0YWlscy5qb2luKFwiIFwiKSA6IFwiXCJ9YC50cmltKCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyY0dJU1JlcXVlc3RFcnJvcihmb3JtYXR0ZWRNZXNzYWdlLCBgSFRUUCAke3N0YXR1c30gJHtzdGF0dXNUZXh0fWAsIGpzb25FcnJvciwgdXJsLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgYWxyZWFkeSB3ZXJlIGFib3V0IHRvIGZvcm1hdCB0aGlzIGFzIGFuIEFyY0dJU1JlcXVlc3RFcnJvciB0aHJvdyB0aGF0IGVycm9yXG4gICAgICAgICAgICAgICAgaWYgKGUubmFtZSA9PT0gXCJBcmNHSVNSZXF1ZXN0RXJyb3JcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzZXJ2ZXIgcmVzcG9uZGVkIHcvIGFuIGFjdHVhbCBlcnJvciAoNDA0LCA1MDAsIGV0YykgYnV0IHdlIGNvdWxkIG5vdCBwYXJzZSBpdCBhcyBKU09OXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0dXMsIHN0YXR1c1RleHQgfSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmNHSVNSZXF1ZXN0RXJyb3Ioc3RhdHVzVGV4dCwgYEhUVFAgJHtzdGF0dXN9YCwgcmVzcG9uc2UsIHVybCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmF3UmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHBhcmFtcy5mKSB7XG4gICAgICAgICAgICBjYXNlIFwianNvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBjYXNlIFwiZ2VvanNvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBibG9iIHJlc3BvbnNlcyBhcmUgZGlmZmljdWx0IHRvIG1ha2UgY3Jvc3MgcGxhdGZvcm0gd2Ugd2lsbCBqdXN0IGhhdmUgdG8gdHJ1c3QgdGhhdCBpc29tb3JwaGljIGZldGNoIHdpbGwgZG8gaXRzIGpvYiAqL1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYmxvYigpO1xuICAgICAgICB9XG4gICAgfSlcbiAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGFuIGVycm9yIGluIHRoZSBKU09OIGJvZHkgb2YgYSBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAgICAvLyBNb3N0IEFyY0dJUyBTZXJ2ZXIgc2VydmljZXMgd2lsbCByZXR1cm4gYSBzdWNjZXNzZnVsIHN0YXR1cyBjb2RlIGJ1dCBpbmNsdWRlIGFuIGVycm9yIGluIHRoZSByZXNwb25zZSBib2R5LlxuICAgICAgICBpZiAoKHBhcmFtcy5mID09PSBcImpzb25cIiB8fCBwYXJhbXMuZiA9PT0gXCJnZW9qc29uXCIpICYmICFyYXdSZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBjaGVja0ZvckVycm9ycyhkYXRhLCBvcmlnaW5hbFVybCwgcGFyYW1zLCBvcHRpb25zLCBvcmlnaW5hbEF1dGhFcnJvcik7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIHBvcnRhbC9zZWxmIGNhbGwsIGFuZCB3ZSBnb3QgYXV0aG9yaXplZE5vQ29yc0RvbWFpbnMgYmFja1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlbVxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgL1xcL3NoYXJpbmdcXC9yZXN0XFwvKGFjY291bnRzfHBvcnRhbHMpXFwvc2VsZi9pLnRlc3QodXJsKSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYSBsaXN0IG9mIG5vLWNvcnMgZG9tYWlucywgcmVnaXN0ZXIgdGhlbVxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuYXV0aG9yaXplZENyb3NzT3JpZ2luTm9Db3JzRG9tYWlucykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJOb0NvcnNEb21haW5zKGRhdGEuYXV0aG9yaXplZENyb3NzT3JpZ2luTm9Db3JzRG9tYWlucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsQXV0aEVycm9yKSB7XG4gICAgICAgICAgICAgICAgLyogSWYgdGhlIHJlcXVlc3Qgd2FzIG1hZGUgdG8gYW4gdW5mZWRlcmF0ZWQgc2VydmljZSB0aGF0XG4gICAgICAgICAgICAgICAgZGlkbid0IHJlcXVpcmUgYXV0aGVudGljYXRpb24sIGFkZCB0aGUgYmFzZSB1cmwgYW5kIGEgZHVtbXkgdG9rZW5cbiAgICAgICAgICAgICAgICB0byB0aGUgbGlzdCBvZiB0cnVzdGVkIHNlcnZlcnMgdG8gYXZvaWQgYW5vdGhlciBmZWRlcmF0aW9uIGNoZWNrXG4gICAgICAgICAgICAgICAgaW4gdGhlIGV2ZW50IG9mIGEgcmVwZWF0IHJlcXVlc3QgKi9cbiAgICAgICAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRVcmwgPSB1cmxcbiAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KC9cXC9yZXN0KFxcL2FkbWluKT9cXC9zZXJ2aWNlc1xcLy8pWzBdO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuYXV0aGVudGljYXRpb24uZmVkZXJhdGVkU2VydmVyc1t0cnVuY2F0ZWRVcmxdID0ge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbjogW10sXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gMjQgaG91cnNcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJlczogbmV3IERhdGUoRGF0ZS5ub3coKSArIDg2NDAwICogMTAwMClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsQXV0aEVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEdlbmVyaWMgbWV0aG9kIGZvciBtYWtpbmcgSFRUUCByZXF1ZXN0cyB0byBBcmNHSVMgUkVTVCBBUEkgZW5kcG9pbnRzLlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnQGVzcmkvYXJjZ2lzLXJlc3QtcmVxdWVzdCc7XG4gKlxuICogcmVxdWVzdCgnaHR0cHM6Ly93d3cuYXJjZ2lzLmNvbS9zaGFyaW5nL3Jlc3QnKVxuICogICAudGhlbihyZXNwb25zZSkgLy8gcmVzcG9uc2UuY3VycmVudFZlcnNpb24gPT09IDUuMlxuICpcbiAqIHJlcXVlc3QoJ2h0dHBzOi8vd3d3LmFyY2dpcy5jb20vc2hhcmluZy9yZXN0Jywge1xuICogICBodHRwTWV0aG9kOiBcIkdFVFwiXG4gKiB9KVxuICpcbiAqIHJlcXVlc3QoJ2h0dHBzOi8vd3d3LmFyY2dpcy5jb20vc2hhcmluZy9yZXN0L3NlYXJjaCcsIHtcbiAqICAgcGFyYW1zOiB7IHE6ICdwYXJrcycgfVxuICogfSlcbiAqICAgLnRoZW4ocmVzcG9uc2UpIC8vIHJlc3BvbnNlLnRvdGFsID0+IDc4Mzc5XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCBvZiB0aGUgQXJjR0lTIFJFU1QgQVBJIGVuZHBvaW50LlxuICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3QsIGluY2x1ZGluZyBwYXJhbWV0ZXJzIHJlbGV2YW50IHRvIHRoZSBlbmRwb2ludC5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSB3aXRoIHRoZSBkYXRhIGZyb20gdGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdCh1cmwsIHJlcXVlc3RPcHRpb25zID0geyBwYXJhbXM6IHsgZjogXCJqc29uXCIgfSB9KSB7XG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSByZXF1ZXN0T3B0aW9ucywgaW50ZXJuYWxPcHRpb25zID0gX19yZXN0KHJlcXVlc3RPcHRpb25zLCBbXCJyZXF1ZXN0XCJdKTtcbiAgICAvLyBpZiB0aGUgdXNlciBwYXNzZWQgaW4gYSBjdXN0b20gcmVxdWVzdCBmdW5jdGlvbiwgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdFxuICAgIHJldHVybiByZXF1ZXN0XG4gICAgICAgID8gcmVxdWVzdCh1cmwsIGludGVybmFsT3B0aW9ucylcbiAgICAgICAgOiBpbnRlcm5hbFJlcXVlc3QodXJsLCBpbnRlcm5hbE9wdGlvbnMpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEFyY0dJU0F1dGhFcnJvciAmJlxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHJlcXVlc3RPcHRpb25zLmF1dGhlbnRpY2F0aW9uICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMuYXV0aGVudGljYXRpb24uY2FuUmVmcmVzaCAmJlxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLmF1dGhlbnRpY2F0aW9uLnJlZnJlc2hDcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHJ5KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RPcHRpb25zLmF1dGhlbnRpY2F0aW9uLnJlZnJlc2hDcmVkZW50aWFscygpO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVlc3QuanMubWFwIiwiLyogQ29weXJpZ2h0IChjKSAyMDE4IEVudmlyb25tZW50YWwgU3lzdGVtcyBSZXNlYXJjaCBJbnN0aXR1dGUsIEluYy5cbiAqIEFwYWNoZS0yLjAgKi9cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBlbnN1cmUgdGhhdCB1c2VyIHN1cHBsaWVkIHVybHMgZG9uJ3QgaW5jbHVkZSB3aGl0ZXNwYWNlIG9yIGEgdHJhaWxpbmcgc2xhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblVybCh1cmwpIHtcbiAgICAvLyBHdWFyZCBzbyB3ZSBkb24ndCB0cnkgdG8gdHJpbSBzb21ldGhpbmcgdGhhdCdzIG5vdCBhIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICAgIC8vIHRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzLCBidXQgbm90IHNwYWNlcyBpbnNpZGUgdGhlIHVybFxuICAgIHVybCA9IHVybC50cmltKCk7XG4gICAgLy8gcmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCB0byB0aGUgdXJsIGlmIG9uZSB3YXMgaW5jbHVkZWRcbiAgICBpZiAodXJsW3VybC5sZW5ndGggLSAxXSA9PT0gXCIvXCIpIHtcbiAgICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIC0xKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsZWFuLXVybC5qcy5tYXAiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTcgRW52aXJvbm1lbnRhbCBTeXN0ZW1zIFJlc2VhcmNoIEluc3RpdHV0ZSwgSW5jLlxuICogQXBhY2hlLTIuMCAqL1xuaW1wb3J0IHsgY2xlYW5VcmwgfSBmcm9tIFwiQGVzcmkvYXJjZ2lzLXJlc3QtcmVxdWVzdFwiO1xuLyoqXG4gKiBIZWxwZXIgdGhhdCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBwb3J0YWwgdXJsIGZvciBhIGdpdmVuIHJlcXVlc3QuIGByZXF1ZXN0T3B0aW9ucy5wb3J0YWxgIGlzIGdpdmVuXG4gKiBwcmVjZWRlbmNlIG92ZXIgYGF1dGhlbnRpY2F0aW9uLnBvcnRhbGAuIElmIG5laXRoZXIgYHBvcnRhbGAgbm9yIGBhdXRoZW50aWNhdGlvbmAgaXMgcHJlc2VudCxcbiAqIGB3d3cuYXJjZ2lzLmNvbS9zaGFyaW5nL3Jlc3RgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyAtIFJlcXVlc3Qgb3B0aW9ucyB0aGF0IG1heSBoYXZlIGF1dGhlbnRpY2F0aW9uIG1hbmFnZXJcbiAqIEByZXR1cm5zIFBvcnRhbCB1cmwgdG8gYmUgdXNlZCBpbiBBUEkgcmVxdWVzdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcnRhbFVybChyZXF1ZXN0T3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gdXNlIHBvcnRhbCBpbiBvcHRpb25zIGlmIHNwZWNpZmllZFxuICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5wb3J0YWwpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFuVXJsKHJlcXVlc3RPcHRpb25zLnBvcnRhbCk7XG4gICAgfVxuICAgIC8vIGlmIGF1dGggd2FzIHBhc3NlZCwgdXNlIHRoYXQgcG9ydGFsXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmXG4gICAgICAgIHR5cGVvZiByZXF1ZXN0T3B0aW9ucy5hdXRoZW50aWNhdGlvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyB0aGUgcG9ydGFsIHVybCBpcyBhbHJlYWR5IHNjcnViYmVkIGluIHRoZSBhdXRoIHBhY2thZ2VcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RPcHRpb25zLmF1dGhlbnRpY2F0aW9uLnBvcnRhbDtcbiAgICB9XG4gICAgLy8gZGVmYXVsdCB0byBhcmNnaXMuY29tXG4gICAgcmV0dXJuIFwiaHR0cHM6Ly93d3cuYXJjZ2lzLmNvbS9zaGFyaW5nL3Jlc3RcIjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1wb3J0YWwtdXJsLmpzLm1hcCIsIi8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4IEVudmlyb25tZW50YWwgU3lzdGVtcyBSZXNlYXJjaCBJbnN0aXR1dGUsIEluYy5cbiAqIEFwYWNoZS0yLjAgKi9cbi8qKlxuICogYHJlcXVlc3RPcHRpb25zLm93bmVyYCBpcyBnaXZlbiBwcmlvcml0eSwgYHJlcXVlc3RPcHRpb25zLml0ZW0ub3duZXJgIHdpbGwgYmUgY2hlY2tlZCBuZXh0LiBJZiBuZWl0aGVyIGFyZSBwcmVzZW50LCBgYXV0aGVudGljYXRpb24uZ2V0VXNlck5hbWUoKWAgd2lsbCBiZSB1c2VkIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVPd25lcihyZXF1ZXN0T3B0aW9ucykge1xuICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5vd25lcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlcXVlc3RPcHRpb25zLm93bmVyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxdWVzdE9wdGlvbnMuaXRlbSAmJiByZXF1ZXN0T3B0aW9ucy5pdGVtLm93bmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVxdWVzdE9wdGlvbnMuaXRlbS5vd25lcik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlcXVlc3RPcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmF1dGhlbnRpY2F0aW9uLmdldFVzZXJuYW1lKSB7XG4gICAgICAgIHJldHVybiByZXF1ZXN0T3B0aW9ucy5hdXRoZW50aWNhdGlvbi5nZXRVc2VybmFtZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG93bmVyIG9mIHRoaXMgaXRlbS4gUGFzcyB0aGUgYG93bmVyYCwgYGl0ZW0ub3duZXJgLCBvciBgYXV0aGVudGljYXRpb25gIG9wdGlvbi5cIikpO1xuICAgIH1cbn1cbi8qKlxuICogY2hlY2tzIGlmIHRoZSBleHRlbnQgaXMgYSB2YWxpZCBCQm94ICgyIGVsZW1lbnQgYXJyYXkgb2YgY29vcmRpbmF0ZSBwYWlyIGFycmF5cylcbiAqIEBwYXJhbSBleHRlbnRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JCb3goZXh0ZW50KSB7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KGV4dGVudCkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShleHRlbnRbMF0pICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoZXh0ZW50WzFdKSk7XG59XG4vKipcbiAqIEdpdmVuIGEgQmJveCwgY29udmVydCBpdCB0byBhIHN0cmluZy4gU29tZSBhcGkgZW5kcG9pbnRzIGV4cGVjdCBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7QkJveH0gZXh0ZW50XG4gKiBAcmV0dXJuIHsqfSAge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJib3hUb1N0cmluZyhleHRlbnQpIHtcbiAgICByZXR1cm4gZXh0ZW50LmpvaW4oXCIsXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTggRW52aXJvbm1lbnRhbCBTeXN0ZW1zIFJlc2VhcmNoIEluc3RpdHV0ZSwgSW5jLlxuICogQXBhY2hlLTIuMCAqL1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAZXNyaS9hcmNnaXMtcmVzdC1yZXF1ZXN0XCI7XG5pbXBvcnQgeyBnZXRQb3J0YWxVcmwgfSBmcm9tIFwiLi4vdXRpbC9nZXQtcG9ydGFsLXVybC5qc1wiO1xuaW1wb3J0IHsgZGV0ZXJtaW5lT3duZXIsIGlzQkJveCwgYmJveFRvU3RyaW5nIH0gZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuLyoqXG4gKiBVcGRhdGUgYW4gSXRlbS4gU2VlIHRoZSBbUkVTVCBEb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3BlcnMuYXJjZ2lzLmNvbS9yZXN0L3VzZXJzLWdyb3Vwcy1hbmQtaXRlbXMvdXBkYXRlLWl0ZW0uaHRtKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgdXBkYXRlSXRlbSB9IGZyb20gXCJAZXNyaS9hcmNnaXMtcmVzdC1wb3J0YWxcIjtcbiAqXG4gKiB1cGRhdGVJdGVtKHtcbiAqICAgaXRlbToge1xuICogICAgIGlkOiBcIjNlZlwiLFxuICogICAgIGRlc2NyaXB0aW9uOiBcIkEgdGhyZWUgaG91ciB0b3VyXCJcbiAqICAgfSxcbiAqICAgYXV0aGVudGljYXRpb25cbiAqIH0pXG4gKiAgIC50aGVuKHJlc3BvbnNlKVxuICogYGBgXG4gKlxuICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3QuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCB1cGRhdGVzIGFuIGl0ZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVJdGVtKHJlcXVlc3RPcHRpb25zKSB7XG4gICAgcmV0dXJuIGRldGVybWluZU93bmVyKHJlcXVlc3RPcHRpb25zKS50aGVuKChvd25lcikgPT4ge1xuICAgICAgICBjb25zdCB1cmwgPSByZXF1ZXN0T3B0aW9ucy5mb2xkZXJJZFxuICAgICAgICAgICAgPyBgJHtnZXRQb3J0YWxVcmwocmVxdWVzdE9wdGlvbnMpfS9jb250ZW50L3VzZXJzLyR7b3duZXJ9LyR7cmVxdWVzdE9wdGlvbnMuZm9sZGVySWR9L2l0ZW1zLyR7cmVxdWVzdE9wdGlvbnMuaXRlbS5pZH0vdXBkYXRlYFxuICAgICAgICAgICAgOiBgJHtnZXRQb3J0YWxVcmwocmVxdWVzdE9wdGlvbnMpfS9jb250ZW50L3VzZXJzLyR7b3duZXJ9L2l0ZW1zLyR7cmVxdWVzdE9wdGlvbnMuaXRlbS5pZH0vdXBkYXRlYDtcbiAgICAgICAgLy8gc2VyaWFsaXplIHRoZSBpdGVtIGludG8gc29tZXRoaW5nIFBvcnRhbCB3aWxsIGFjY2VwdFxuICAgICAgICByZXF1ZXN0T3B0aW9ucy5wYXJhbXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3RPcHRpb25zLnBhcmFtcyksIHJlcXVlc3RPcHRpb25zLml0ZW0pO1xuICAgICAgICAvLyBjb252ZXJ0IGV4dGVudCwgaWYgcHJlc2VudCwgaW50byBhIHN0cmluZyBmcm9tIGJib3hcbiAgICAgICAgLy8gcHJvY2Vzc1BhcmFtcyB3YXMgcHJldmlvdXNseSBkb2luZyB0aGlzIHNvcnQgb2Ygd29yayxcbiAgICAgICAgLy8gaG93ZXZlciBub3cgd2UgbmVlZCB0byBsZXQgYXJyYXkgb2YgYXJyYXlzIHRocm91Z2hcbiAgICAgICAgLy8gVGh1cyBmb3IgZXh0ZW50cyB3ZSBuZWVkIHRvIG1vdmUgdGhpcyBsb2dpYyBoZXJlXG4gICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5wYXJhbXMuZXh0ZW50ICYmIGlzQkJveChyZXF1ZXN0T3B0aW9ucy5wYXJhbXMuZXh0ZW50KSkge1xuICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMucGFyYW1zLmV4dGVudCA9IGJib3hUb1N0cmluZyhyZXF1ZXN0T3B0aW9ucy5wYXJhbXMuZXh0ZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxdWVzdCh1cmwsIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9KTtcbn1cbi8qKlxuICogVXBkYXRlIGFuIGluZm8gZmlsZSBhc3NvY2lhdGVkIHdpdGggYW4gaXRlbS4gU2VlIHRoZSBbUkVTVCBEb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3BlcnMuYXJjZ2lzLmNvbS9yZXN0L3VzZXJzLWdyb3Vwcy1hbmQtaXRlbXMvdXBkYXRlLWluZm8uaHRtKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgdXBkYXRlSXRlbUluZm8gfSBmcm9tIFwiQGVzcmkvYXJjZ2lzLXJlc3QtcG9ydGFsXCI7XG4gKlxuICogdXBkYXRlSXRlbUluZm8oe1xuICogICBpZDogJzNlZicsXG4gKiAgIGZpbGU6IGZpbGUsXG4gKiAgIGF1dGhlbnRpY2F0aW9uXG4gKiB9KVxuICogICAudGhlbihyZXNwb25zZSlcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCB1cGRhdGVzIGFuIGl0ZW0gaW5mbyBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlSXRlbUluZm8ocmVxdWVzdE9wdGlvbnMpIHtcbiAgICByZXR1cm4gZGV0ZXJtaW5lT3duZXIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKG93bmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke2dldFBvcnRhbFVybChyZXF1ZXN0T3B0aW9ucyl9L2NvbnRlbnQvdXNlcnMvJHtvd25lcn0vaXRlbXMvJHtyZXF1ZXN0T3B0aW9ucy5pZH0vdXBkYXRlaW5mb2A7XG4gICAgICAgIC8vIG1peCBpbiB1c2VyIHN1cHBsaWVkIHBhcmFtc1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5wYXJhbXMgPSBPYmplY3QuYXNzaWduKHsgZm9sZGVyTmFtZTogcmVxdWVzdE9wdGlvbnMuZm9sZGVyTmFtZSwgZmlsZTogcmVxdWVzdE9wdGlvbnMuZmlsZSB9LCByZXF1ZXN0T3B0aW9ucy5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVxdWVzdCh1cmwsIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9KTtcbn1cbi8qKlxuICogVXBkYXRlIGFuIGluZm8gZmlsZSBhc3NvY2lhdGVkIHdpdGggYW4gaXRlbS4gU2VlIHRoZSBbUkVTVCBEb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3BlcnMuYXJjZ2lzLmNvbS9yZXN0L3VzZXJzLWdyb3Vwcy1hbmQtaXRlbXMvdXBkYXRlLWluZm8uaHRtKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgdXBkYXRlSXRlbVJlc291cmNlIH0gZnJvbSBcIkBlc3JpL2FyY2dpcy1yZXN0LXBvcnRhbFwiO1xuICpcbiAqIHVwZGF0ZUl0ZW1SZXNvdXJjZSh7XG4gKiAgIGlkOiAnM2VmJyxcbiAqICAgcmVzb3VyY2U6IGZpbGUsXG4gKiAgIG5hbWU6ICdiaWdrYWh1bmEuanBnJyxcbiAqICAgYXV0aGVudGljYXRpb25cbiAqIH0pXG4gKiAgIC50aGVuKHJlc3BvbnNlKVxuICogYGBgXG4gKiBVcGRhdGUgYSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggYW4gaXRlbS4gU2VlIHRoZSBbUkVTVCBEb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3BlcnMuYXJjZ2lzLmNvbS9yZXN0L3VzZXJzLWdyb3Vwcy1hbmQtaXRlbXMvdXBkYXRlLXJlc291cmNlcy5odG0pIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCB1cGRhdGVzIGFuIGl0ZW0gcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVJdGVtUmVzb3VyY2UocmVxdWVzdE9wdGlvbnMpIHtcbiAgICByZXR1cm4gZGV0ZXJtaW5lT3duZXIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKG93bmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke2dldFBvcnRhbFVybChyZXF1ZXN0T3B0aW9ucyl9L2NvbnRlbnQvdXNlcnMvJHtvd25lcn0vaXRlbXMvJHtyZXF1ZXN0T3B0aW9ucy5pZH0vdXBkYXRlUmVzb3VyY2VzYDtcbiAgICAgICAgLy8gbWl4IGluIHVzZXIgc3VwcGxpZWQgcGFyYW1zXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLnBhcmFtcyA9IE9iamVjdC5hc3NpZ24oeyBmaWxlOiByZXF1ZXN0T3B0aW9ucy5yZXNvdXJjZSwgZmlsZU5hbWU6IHJlcXVlc3RPcHRpb25zLm5hbWUsIHJlc291cmNlc1ByZWZpeDogcmVxdWVzdE9wdGlvbnMucHJlZml4LCB0ZXh0OiByZXF1ZXN0T3B0aW9ucy5jb250ZW50IH0sIHJlcXVlc3RPcHRpb25zLnBhcmFtcyk7XG4gICAgICAgIC8vIG9ubHkgb3ZlcnJpZGUgdGhlIGFjY2VzcyBzcGVjaWZpZWQgcHJldmlvdXNseSBpZiAncHJpdmF0ZScgaXMgcGFzc2VkIGV4cGxpY2l0bHlcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0T3B0aW9ucy5wcml2YXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXF1ZXN0T3B0aW9ucy5wYXJhbXMuYWNjZXNzID0gcmVxdWVzdE9wdGlvbnMucHJpdmF0ZVxuICAgICAgICAgICAgICAgID8gXCJwcml2YXRlXCJcbiAgICAgICAgICAgICAgICA6IFwiaW5oZXJpdFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXF1ZXN0KHVybCwgcmVxdWVzdE9wdGlvbnMpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBNb3ZlIGFuIGl0ZW0gdG8gYSBmb2xkZXIuIFNlZSB0aGUgW1JFU1QgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXJzLmFyY2dpcy5jb20vcmVzdC91c2Vycy1ncm91cHMtYW5kLWl0ZW1zL21vdmUtaXRlbS5odG0pIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBtb3ZlSXRlbSB9IGZyb20gXCJAZXNyaS9hcmNnaXMtcmVzdC1wb3J0YWxcIjtcbiAqIC8vXG4gKiBtb3ZlSXRlbSh7XG4gKiAgIGl0ZW1JZDogXCIzZWZcIixcbiAqICAgZm9sZGVySWQ6IFwiN2M1XCIsXG4gKiAgIGF1dGhlbnRpY2F0aW9uOiBBcmNHSVNJZGVudGl0eU1hbmFnZXJcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBvd25lciBhbmQgZm9sZGVyIGRldGFpbHMgb25jZSB0aGUgbW92ZSBoYXMgYmVlbiBjb21wbGV0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vdmVJdGVtKHJlcXVlc3RPcHRpb25zKSB7XG4gICAgcmV0dXJuIGRldGVybWluZU93bmVyKHJlcXVlc3RPcHRpb25zKS50aGVuKChvd25lcikgPT4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHtnZXRQb3J0YWxVcmwocmVxdWVzdE9wdGlvbnMpfS9jb250ZW50L3VzZXJzLyR7b3duZXJ9L2l0ZW1zLyR7cmVxdWVzdE9wdGlvbnMuaXRlbUlkfS9tb3ZlYDtcbiAgICAgICAgbGV0IGZvbGRlcklkID0gcmVxdWVzdE9wdGlvbnMuZm9sZGVySWQ7XG4gICAgICAgIGlmICghZm9sZGVySWQpIHtcbiAgICAgICAgICAgIGZvbGRlcklkID0gXCIvXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdE9wdGlvbnMucGFyYW1zID0gT2JqZWN0LmFzc2lnbih7IGZvbGRlcjogZm9sZGVySWQgfSwgcmVxdWVzdE9wdGlvbnMucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3QodXJsLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cGRhdGUuanMubWFwIiwiLyogQ29weXJpZ2h0IChjKSAyMDE4IEVudmlyb25tZW50YWwgU3lzdGVtcyBSZXNlYXJjaCBJbnN0aXR1dGUsIEluYy5cbiAqIEFwYWNoZS0yLjAgKi9cbmltcG9ydCB7IHJlcXVlc3QsIGFwcGVuZEN1c3RvbVBhcmFtcyB9IGZyb20gXCJAZXNyaS9hcmNnaXMtcmVzdC1yZXF1ZXN0XCI7XG5pbXBvcnQgeyBnZXRQb3J0YWxVcmwgfSBmcm9tIFwiLi4vdXRpbC9nZXQtcG9ydGFsLXVybC5qc1wiO1xuaW1wb3J0IHsgc2NydWJDb250cm9sQ2hhcnMgfSBmcm9tIFwiLi4vdXRpbC9zY3J1Yi1jb250cm9sLWNoYXJzLmpzXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVPd25lciB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbi8qKlxuICogYGBgXG4gKiBpbXBvcnQgeyBnZXRJdGVtIH0gZnJvbSBcIkBlc3JpL2FyY2dpcy1yZXN0LXBvcnRhbFwiO1xuICogLy9cbiAqIGdldEl0ZW0oXCJhZTdcIilcbiAqICAgLnRoZW4ocmVzcG9uc2UpO1xuICogLy8gb3JcbiAqIGdldEl0ZW0oXCJhZTdcIiwgeyBhdXRoZW50aWNhdGlvbiB9KVxuICogICAudGhlbihyZXNwb25zZSlcbiAqIGBgYFxuICogR2V0IGFuIGl0ZW0gYnkgaWQuIFNlZSB0aGUgW1JFU1QgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXJzLmFyY2dpcy5jb20vcmVzdC91c2Vycy1ncm91cHMtYW5kLWl0ZW1zL2l0ZW0uaHRtKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0gaWQgLSBJdGVtIElkXG4gKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIHdpdGggdGhlIGRhdGEgZnJvbSB0aGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKGlkLCByZXF1ZXN0T3B0aW9ucykge1xuICAgIGNvbnN0IHVybCA9IGdldEl0ZW1CYXNlVXJsKGlkLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgLy8gZGVmYXVsdCB0byBhIEdFVCByZXF1ZXN0XG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBodHRwTWV0aG9kOiBcIkdFVFwiIH0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICByZXR1cm4gcmVxdWVzdCh1cmwsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBHZXQgdGhlIGZ1bGx5IHF1YWxpZmllZCBiYXNlIFVSTCB0byB0aGUgUkVTVCBlbmQgcG9pbnQgZm9yIGFuIGl0ZW0uXG4gKiBAcGFyYW0gaWQgSXRlbSBJZFxuICogQHBhcmFtIHBvcnRhbFVybE9yUmVxdWVzdE9wdGlvbnMgYSBwb3J0YWwgVVJMIG9yIHJlcXVlc3Qgb3B0aW9uc1xuICogQHJldHVybnMgVVJMIHRvIHRoZSBpdGVtJ3MgUkVTVCBlbmQgcG9pbnQsIGRlZmF1bHRzIHRvIGBodHRwczovL3d3dy5hcmNnaXMuY29tL3NoYXJpbmcvcmVzdC9jb250ZW50L2l0ZW1zL3tpZH1gXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJdGVtQmFzZVVybCA9IChpZCwgcG9ydGFsVXJsT3JSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHBvcnRhbFVybCA9IHR5cGVvZiBwb3J0YWxVcmxPclJlcXVlc3RPcHRpb25zID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gcG9ydGFsVXJsT3JSZXF1ZXN0T3B0aW9uc1xuICAgICAgICA6IGdldFBvcnRhbFVybChwb3J0YWxVcmxPclJlcXVlc3RPcHRpb25zKTtcbiAgICByZXR1cm4gYCR7cG9ydGFsVXJsfS9jb250ZW50L2l0ZW1zLyR7aWR9YDtcbn07XG4vKipcbiAqIGBgYFxuICogaW1wb3J0IHsgZ2V0SXRlbURhdGEgfSBmcm9tIFwiQGVzcmkvYXJjZ2lzLXJlc3QtcG9ydGFsXCI7XG4gKiAvL1xuICogZ2V0SXRlbURhdGEoXCJhZTdcIilcbiAqICAgLnRoZW4ocmVzcG9uc2UpXG4gKiAvLyBvclxuICogZ2V0SXRlbURhdGEoXCJhZTdcIiwgeyBhdXRoZW50aWNhdGlvbiB9KVxuICogICAudGhlbihyZXNwb25zZSlcbiAqIGBgYFxuICogR2V0IHRoZSAvZGF0YSBmb3IgYW4gaXRlbS4gSWYgbm8gZGF0YSBleGlzdHMsIHJldHVybnMgYHVuZGVmaW5lZGAuIFNlZSB0aGUgW1JFU1QgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXJzLmFyY2dpcy5jb20vcmVzdC91c2Vycy1ncm91cHMtYW5kLWl0ZW1zL2l0ZW0tZGF0YS5odG0pIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGlkIC0gSXRlbSBJZFxuICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSB3aXRoIHRoZSBqc29uIGRhdGEgZm9yIHRoZSBpdGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGEoaWQsIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgY29uc3QgdXJsID0gYCR7Z2V0SXRlbUJhc2VVcmwoaWQsIHJlcXVlc3RPcHRpb25zKX0vZGF0YWA7XG4gICAgLy8gZGVmYXVsdCB0byBhIEdFVCByZXF1ZXN0XG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBwYXJhbXM6IHt9IH0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5maWxlKSB7XG4gICAgICAgIG9wdGlvbnMucGFyYW1zLmYgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdCh1cmwsIG9wdGlvbnMpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgLyogaWYgdGhlIGl0ZW0gZG9lc24ndCBpbmNsdWRlIGRhdGEsIHRoZSByZXNwb25zZSB3aWxsIGJlIGVtcHR5XG4gICAgICAgICAgIGFuZCB0aGUgaW50ZXJuYWwgY2FsbCB0byByZXNwb25zZS5qc29uKCkgd2lsbCBmYWlsICovXG4gICAgICAgIGNvbnN0IGVtcHR5UmVzcG9uc2VFcnIgPSBSZWdFeHAoL1RoZSBzdHJpbmcgZGlkIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgcGF0dGVybnwoVW5leHBlY3RlZCBlbmQgb2YgKEpTT04gaW5wdXR8ZGF0YSBhdCBsaW5lIDEgY29sdW1uIDEpKS9pKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGVtcHR5UmVzcG9uc2VFcnIudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG59XG4vKipcbiAqIGBgYFxuICogaW1wb3J0IHsgZ2V0UmVsYXRlZEl0ZW1zIH0gZnJvbSBcIkBlc3JpL2FyY2dpcy1yZXN0LXBvcnRhbFwiO1xuICogLy9cbiAqIGdldFJlbGF0ZWRJdGVtcyh7XG4gKiAgIGlkOiBcImFlN1wiLFxuICogICByZWxhdGlvbnNoaXBUeXBlOiBcIlNlcnZpY2UyTGF5ZXJcIiAvLyBvciBzZXZlcmFsIFtcIlNlcnZpY2UyTGF5ZXJcIiwgXCJNYXAyQXJlYVwiXVxuICogfSlcbiAqICAgLnRoZW4ocmVzcG9uc2UpXG4gKiBgYGBcbiAqIEdldCB0aGUgcmVsYXRlZCBpdGVtcy4gU2VlIHRoZSBbUkVTVCBEb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3BlcnMuYXJjZ2lzLmNvbS9yZXN0L3VzZXJzLWdyb3Vwcy1hbmQtaXRlbXMvcmVsYXRlZC1pdGVtcy5odG0pIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyBBIFByb21pc2UgdG8gZ2V0IHNvbWUgaXRlbSByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxhdGVkSXRlbXMocmVxdWVzdE9wdGlvbnMpIHtcbiAgICBjb25zdCB1cmwgPSBgJHtnZXRJdGVtQmFzZVVybChyZXF1ZXN0T3B0aW9ucy5pZCwgcmVxdWVzdE9wdGlvbnMpfS9yZWxhdGVkSXRlbXNgO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgcGFyYW1zOiB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IHJlcXVlc3RPcHRpb25zLmRpcmVjdGlvblxuICAgICAgICB9IH0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICBpZiAodHlwZW9mIHJlcXVlc3RPcHRpb25zLnJlbGF0aW9uc2hpcFR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMucmVsYXRpb25zaGlwVHlwZSA9IHJlcXVlc3RPcHRpb25zLnJlbGF0aW9uc2hpcFR5cGU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBhcmFtcy5yZWxhdGlvbnNoaXBUeXBlcyA9IHJlcXVlc3RPcHRpb25zLnJlbGF0aW9uc2hpcFR5cGU7XG4gICAgfVxuICAgIGRlbGV0ZSBvcHRpb25zLmRpcmVjdGlvbjtcbiAgICBkZWxldGUgb3B0aW9ucy5yZWxhdGlvbnNoaXBUeXBlO1xuICAgIHJldHVybiByZXF1ZXN0KHVybCwgb3B0aW9ucyk7XG59XG4vKipcbiAqIEdldCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhbiBpdGVtXG4gKlxuICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0byBnZXQgc29tZSBpdGVtIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1SZXNvdXJjZXMoaWQsIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgY29uc3QgdXJsID0gYCR7Z2V0SXRlbUJhc2VVcmwoaWQsIHJlcXVlc3RPcHRpb25zKX0vcmVzb3VyY2VzYDtcbiAgICAvLyBNaXggaW4gbnVtOjEwMDAgd2l0aCBhbnkgdXNlciBzdXBwbGllZCBwYXJhbXNcbiAgICAvLyBLZXkgdGhpbmcgLSB3ZSBkb24ndCB3YW50IHRvIG11dGF0ZSB0aGUgcGFzc2VkIGluIHJlcXVlc3RPcHRpb25zXG4gICAgLy8gYXMgdGhhdCBtYXkgYmUgdXNlZCBpbiBvdGhlciAoc3Vic2VxdWVudCkgY2FsbHMgaW4gdGhlIGNvdXJzZVxuICAgIC8vIG9mIGEgbG9uZyBwcm9taXNlIGNoYWluc1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgb3B0aW9ucy5wYXJhbXMgPSBPYmplY3QuYXNzaWduKHsgbnVtOiAxMDAwIH0sIG9wdGlvbnMucGFyYW1zKTtcbiAgICByZXR1cm4gcmVxdWVzdCh1cmwsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBGZXRjaGVzIGFuIGl0ZW0gcmVzb3VyY2UgYW5kIG9wdGlvbmFsbHkgcGFyc2VzIGl0IHRvIHRoZSBjb3JyZWN0IGZvcm1hdC5cbiAqXG4gKiBQcm92aWRlcyBKU09OIHBhcnNlIGVycm9yIHByb3RlY3Rpb24gYnkgc2FuaXRpemluZyBvdXQgYW55IHVuZXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMgYmVmb3JlIHBhcnNpbmcgdGhhdCB3b3VsZCBvdGhlcndpc2UgY2F1c2UgYW4gZXJyb3IgdG8gYmUgdGhyb3duLlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBnZXRJdGVtUmVzb3VyY2UgfSBmcm9tIFwiQGVzcmkvYXJjZ2lzLXJlc3QtcG9ydGFsXCI7XG4gKlxuICogLy8gUGFyc2VzIGNvbnRlbnRzIGFzIGJsb2IgYnkgZGVmYXVsdFxuICogZ2V0SXRlbVJlc291cmNlKFwiM2VmXCIsIHsgZmlsZU5hbWU6IFwicmVzb3VyY2UuanBnXCIsIC4uLn0pXG4gKiAgLnRoZW4ocmVzb3VyY2VDb250ZW50cyA9PiB7fSk7XG4gKlxuICogLy8gQ2FuIG92ZXJyaWRlIHBhcnNlIG1ldGhvZFxuICogZ2V0SXRlbVJlc291cmNlKFwiM2VmXCIsIHsgZmlsZU5hbWU6IFwicmVzb3VyY2UuanNvblwiLCByZWFkQXM6ICdqc29uJywgLi4ufSlcbiAqICAudGhlbihyZXNvdXJjZUNvbnRlbnRzID0+IHt9KTtcbiAqXG4gKiAvLyBHZXQgdGhlIHJlc3BvbnNlIG9iamVjdCBpbnN0ZWFkXG4gKiBnZXRJdGVtUmVzb3VyY2UoXCIzZWZcIix7IHJhd1Jlc3BvbnNlOiB0cnVlLCBmaWxlTmFtZTogXCJyZXNvdXJjZS5qc29uXCIgfSlcbiAqICAudGhlbihyZXNwb25zZSA9PiB7fSlcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtSWRcbiAqIEBwYXJhbSB7SUdldEl0ZW1SZXNvdXJjZU9wdGlvbnN9IHJlcXVlc3RPcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtUmVzb3VyY2UoaXRlbUlkLCByZXF1ZXN0T3B0aW9ucykge1xuICAgIGNvbnN0IHJlYWRBcyA9IHJlcXVlc3RPcHRpb25zLnJlYWRBcyB8fCBcImJsb2JcIjtcbiAgICByZXR1cm4gZ2V0SXRlbUZpbGUoaXRlbUlkLCBgL3Jlc291cmNlcy8ke3JlcXVlc3RPcHRpb25zLmZpbGVOYW1lfWAsIHJlYWRBcywgcmVxdWVzdE9wdGlvbnMpO1xufVxuLyoqXG4gKiBMaXN0cyB0aGUgZ3JvdXBzIG9mIHdoaWNoIHRoZSBpdGVtIGlzIGEgcGFydCwgb25seSBzaG93aW5nIHRoZSBncm91cHMgdGhhdCB0aGUgY2FsbGluZyB1c2VyIGNhbiBhY2Nlc3MuIFNlZSB0aGUgW1JFU1QgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXJzLmFyY2dpcy5jb20vcmVzdC91c2Vycy1ncm91cHMtYW5kLWl0ZW1zL2dyb3Vwcy5odG0pIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBnZXRJdGVtR3JvdXBzIH0gZnJvbSBcIkBlc3JpL2FyY2dpcy1yZXN0LXBvcnRhbFwiO1xuICpcbiAqIGdldEl0ZW1Hcm91cHMoXCIzMGU1ZmUzMTQ5YzM0ZGYxYmE5MjJlNmY1YmJmODA4ZlwiKVxuICogICAudGhlbihyZXNwb25zZSlcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBJZCBvZiB0aGUgaXRlbSB0byBxdWVyeSBncm91cCBhc3NvY2lhdGlvbiBmb3IuXG4gKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMgQSBQcm9taXNlIHRvIGdldCBzb21lIGl0ZW0gZ3JvdXBzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUdyb3VwcyhpZCwgcmVxdWVzdE9wdGlvbnMpIHtcbiAgICBjb25zdCB1cmwgPSBgJHtnZXRJdGVtQmFzZVVybChpZCwgcmVxdWVzdE9wdGlvbnMpfS9ncm91cHNgO1xuICAgIHJldHVybiByZXF1ZXN0KHVybCwgcmVxdWVzdE9wdGlvbnMpO1xufVxuLyoqXG4gKiBJbnF1aXJlIGFib3V0IHN0YXR1cyB3aGVuIHB1Ymxpc2hpbmcgYW4gaXRlbSwgYWRkaW5nIGFuIGl0ZW0gaW4gYXN5bmMgbW9kZSwgb3IgYWRkaW5nIHdpdGggYSBtdWx0aXBhcnQgdXBsb2FkLiBTZWUgdGhlIFtSRVNUIERvY3VtZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVycy5hcmNnaXMuY29tL3Jlc3QvdXNlcnMtZ3JvdXBzLWFuZC1pdGVtcy9zdGF0dXMuaHRtKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgZ2V0SXRlbVN0YXR1cyB9IGZyb20gXCJAZXNyaS9hcmNnaXMtcmVzdC1wb3J0YWxcIjtcbiAqXG4gKiBnZXRJdGVtU3RhdHVzKHtcbiAqICAgaWQ6IFwiMzBlNWZlMzE0OWMzNGRmMWJhOTIyZTZmNWJiZjgwOGZcIixcbiAqICAgYXV0aGVudGljYXRpb25cbiAqIH0pXG4gKiAgIC50aGVuKHJlc3BvbnNlKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGlkIC0gVGhlIElkIG9mIHRoZSBpdGVtIHRvIGdldCBzdGF0dXMgZm9yLlxuICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0byBnZXQgdGhlIGl0ZW0gc3RhdHVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVN0YXR1cyhyZXF1ZXN0T3B0aW9ucykge1xuICAgIHJldHVybiBkZXRlcm1pbmVPd25lcihyZXF1ZXN0T3B0aW9ucykudGhlbigob3duZXIpID0+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7Z2V0UG9ydGFsVXJsKHJlcXVlc3RPcHRpb25zKX0vY29udGVudC91c2Vycy8ke293bmVyfS9pdGVtcy8ke3JlcXVlc3RPcHRpb25zLmlkfS9zdGF0dXNgO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXBwZW5kQ3VzdG9tUGFyYW1zKHJlcXVlc3RPcHRpb25zLCBbXCJqb2JJZFwiLCBcImpvYlR5cGVcIl0sIHsgcGFyYW1zOiBPYmplY3QuYXNzaWduKHt9LCByZXF1ZXN0T3B0aW9ucy5wYXJhbXMpIH0pO1xuICAgICAgICByZXR1cm4gcmVxdWVzdCh1cmwsIG9wdGlvbnMpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBMaXN0cyB0aGUgcGFydCBudW1iZXJzIG9mIHRoZSBmaWxlIHBhcnRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gdXBsb2FkZWQgaW4gYSBtdWx0aXBhcnQgZmlsZSB1cGxvYWQuIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgcGFydHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYXMgd2VsbCBhcyB0aG9zZSBwYXJ0cyB0aGF0IHdlcmUgbm90IHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIuIFNlZSB0aGUgW1JFU1QgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXJzLmFyY2dpcy5jb20vcmVzdC91c2Vycy1ncm91cHMtYW5kLWl0ZW1zL3BhcnRzLmh0bSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7IGdldEl0ZW1QYXJ0cyB9IGZyb20gXCJAZXNyaS9hcmNnaXMtcmVzdC1wb3J0YWxcIjtcbiAqXG4gKiBnZXRJdGVtUGFydHMoe1xuICogICBpZDogXCIzMGU1ZmUzMTQ5YzM0ZGYxYmE5MjJlNmY1YmJmODA4ZlwiLFxuICogICBhdXRoZW50aWNhdGlvblxuICogfSlcbiAqICAgLnRoZW4ocmVzcG9uc2UpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgSWQgb2YgdGhlIGl0ZW0gdG8gZ2V0IHBhcnQgbGlzdC5cbiAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyBBIFByb21pc2UgdG8gZ2V0IHRoZSBpdGVtIHBhcnQgbGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1QYXJ0cyhyZXF1ZXN0T3B0aW9ucykge1xuICAgIHJldHVybiBkZXRlcm1pbmVPd25lcihyZXF1ZXN0T3B0aW9ucykudGhlbigob3duZXIpID0+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7Z2V0UG9ydGFsVXJsKHJlcXVlc3RPcHRpb25zKX0vY29udGVudC91c2Vycy8ke293bmVyfS9pdGVtcy8ke3JlcXVlc3RPcHRpb25zLmlkfS9wYXJ0c2A7XG4gICAgICAgIHJldHVybiByZXF1ZXN0KHVybCwgcmVxdWVzdE9wdGlvbnMpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBgYGBcbiAqIGltcG9ydCB7IGdldEl0ZW1JbmZvIH0gZnJvbSBcIkBlc3JpL2FyY2dpcy1yZXN0LXBvcnRhbFwiO1xuICogLy8gZ2V0IHRoZSBcIkluZm8gQ2FyZFwiIGZvciB0aGUgaXRlbVxuICogZ2V0SXRlbUluZm8oXCJhZTdcIilcbiAqICAgLnRoZW4oaXRlbUluZm9YbWwpIC8vIFhNTCBkb2N1bWVudCBhcyBhIHN0cmluZ1xuICogLy8gb3IgZ2V0IHRoZSBjb250ZW50cyBvZiBhIHNwZWNpZmljIGZpbGVcbiAqIGdldEl0ZW1JbmZvKFwiYWU3XCIsIHsgZmlsZU5hbWU6IFwiZm9ybS5qc29uXCIsIHJlYWRBczogXCJqc29uXCIsIGF1dGhlbnRpY2F0aW9uIH0pXG4gKiAgIC50aGVuKGZvcm1Kc29uKSAvLyBKU09OIGRvY3VtZW50IGFzIEpTT05cbiAqIGBgYFxuICogR2V0IGFuIGluZm8gZmlsZSBmb3IgYW4gaXRlbS4gU2VlIHRoZSBbUkVTVCBEb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3BlcnMuYXJjZ2lzLmNvbS9yZXN0L3VzZXJzLWdyb3Vwcy1hbmQtaXRlbXMvaXRlbS1pbmZvLWZpbGUuaHRtKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBpZCAtIEl0ZW0gSWRcbiAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LCBpbmNsdWRpbmcgdGhlIGZpbGUgbmFtZSB3aGljaCBkZWZhdWx0cyB0byBgaXRlbWluZm8ueG1sYC5cbiAqIElmIHRoZSBmaWxlIGlzIG5vdCBhIHRleHQgZmlsZSAoWE1MLCBIVE1MLCBldGMpIHlvdSB3aWxsIG5lZWQgdG8gc3BlY2lmeSB0aGUgYHJlYWRBc2AgcGFyYW1ldGVyXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIGluZm8gZmlsZSBmb3IgdGhlIGl0ZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSW5mbyhpZCwgcmVxdWVzdE9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGZpbGVOYW1lID0gXCJpdGVtaW5mby54bWxcIiwgcmVhZEFzID0gXCJ0ZXh0XCIgfSA9IHJlcXVlc3RPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgaHR0cE1ldGhvZDogXCJHRVRcIiB9LCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgcmV0dXJuIGdldEl0ZW1GaWxlKGlkLCBgL2luZm8vJHtmaWxlTmFtZX1gLCByZWFkQXMsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBgYGBcbiAqIGltcG9ydCB7IGdldEl0ZW1NZXRhZGF0YSB9IGZyb20gXCJAZXNyaS9hcmNnaXMtcmVzdC1wb3J0YWxcIjtcbiAqIC8vIGdldCB0aGUgbWV0YWRhdGEgZm9yIHRoZSBpdGVtXG4gKiBnZXRJdGVtTWV0YWRhdGEoXCJhZTdcIilcbiAqICAgLnRoZW4oaXRlbU1ldGFkYXRhWG1sKSAvLyBYTUwgZG9jdW1lbnQgYXMgYSBzdHJpbmdcbiAqIC8vIG9yIHdpdGggYWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAqIGdldEl0ZW1NZXRhZGF0YShcImFlN1wiLCB7IGF1dGhlbnRpY2F0aW9uIH0pXG4gKiAgIC50aGVuKGl0ZW1NZXRhZGF0YVhtbCkgLy8gWE1MIGRvY3VtZW50IGFzIGEgc3RyaW5nXG4gKiBgYGBcbiAqIEdldCB0aGUgc3RhbmRhcmQgZm9ybWFsIG1ldGFkYXRhIFhNTCBmaWxlIGZvciBhbiBpdGVtIChgL2luZm8vbWV0YWRhdGEvbWV0YWRhdGEueG1sYClcbiAqIEBwYXJhbSBpZCAtIEl0ZW0gSWRcbiAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIG1ldGFkYXRhIGZpbGUgZm9yIHRoZSBpdGVtIGFzIGEgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbU1ldGFkYXRhKGlkLCByZXF1ZXN0T3B0aW9ucykge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3RPcHRpb25zKSwgeyBmaWxlTmFtZTogXCJtZXRhZGF0YS9tZXRhZGF0YS54bWxcIiB9KTtcbiAgICByZXR1cm4gZ2V0SXRlbUluZm8oaWQsIG9wdGlvbnMpO1xufVxuLy8gb3ZlcnJpZGVzIHJlcXVlc3QoKSdzIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHJlYWRpbmcgdGhlIHJlc3BvbnNlXG4vLyB3aGljaCBpcyBiYXNlZCBvbiBgcGFyYW1zLmZgIGFuZCBkZWZhdWx0cyB0byBKU09OXG4vLyBBbHNvIGFkZHMgSlNPTiBwYXJzZSBlcnJvciBwcm90ZWN0aW9uIGJ5IHNhbml0aXppbmcgb3V0IGFueSB1bmVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzIGJlZm9yZSBwYXJzaW5nXG5mdW5jdGlvbiBnZXRJdGVtRmlsZShpZCwgXG4vLyBOT1RFOiBmaWxlTmFtZSBzaG91bGQgaW5jbHVkZSBhbnkgZm9sZGVyL3N1YmZvbGRlcnNcbmZpbGVOYW1lLCByZWFkTWV0aG9kLCByZXF1ZXN0T3B0aW9ucykge1xuICAgIGNvbnN0IHVybCA9IGAke2dldEl0ZW1CYXNlVXJsKGlkLCByZXF1ZXN0T3B0aW9ucyl9JHtmaWxlTmFtZX1gO1xuICAgIC8vIHByZXNlcnZlIGVzY2FwZSBoYXRjaCB0byBsZXQgdGhlIGNvbnN1bWVyIHJlYWQgdGhlIHJlc3BvbnNlXG4gICAgLy8gYW5kIGVuc3VyZSB0aGUgZiBwYXJhbSBpcyBub3QgYXBwZW5kZWQgdG8gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgcGFyYW1zOiB7fSB9LCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgY29uc3QganVzdFJldHVyblJlc3BvbnNlID0gb3B0aW9ucy5yYXdSZXNwb25zZTtcbiAgICBvcHRpb25zLnJhd1Jlc3BvbnNlID0gdHJ1ZTtcbiAgICBvcHRpb25zLnBhcmFtcy5mID0gbnVsbDtcbiAgICByZXR1cm4gcmVxdWVzdCh1cmwsIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChqdXN0UmV0dXJuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVhZE1ldGhvZCAhPT0gXCJqc29uXCJcbiAgICAgICAgICAgID8gcmVzcG9uc2VbcmVhZE1ldGhvZF0oKVxuICAgICAgICAgICAgOiByZXNwb25zZVxuICAgICAgICAgICAgICAgIC50ZXh0KClcbiAgICAgICAgICAgICAgICAudGhlbigodGV4dCkgPT4gSlNPTi5wYXJzZShzY3J1YkNvbnRyb2xDaGFycyh0ZXh0KSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBidWlsZEFjY2Vzc1Byb3BlcnRpZXModXNlcm5hbWUsIGN1cnJlbnRBY2Nlc3NQcm9wZXJ0aWVzLCBhY2Nlc3NDaGFuZ2VzZXQpIHtcbiAgICByZXR1cm4gYWNjZXNzQ2hhbmdlc2V0LnJlZHVjZSgoYWNjZXNzUHJvcGVydGllcywgYWNjZXNzQ2hhbmdlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWN0aW9uLCB0YXJnZXRQcm9wZXJ0eSB9ID0gYWNjZXNzQ2hhbmdlO1xuICAgICAgICBpZiAoYWN0aW9uID09PSAnYWRkJykge1xuICAgICAgICAgICAgYWNjZXNzUHJvcGVydGllc1t0YXJnZXRQcm9wZXJ0eV0gPSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRCeTogdXNlcm5hbWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhY2Nlc3NQcm9wZXJ0aWVzW3RhcmdldFByb3BlcnR5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjZXNzUHJvcGVydGllcztcbiAgICB9LCBjdXJyZW50QWNjZXNzUHJvcGVydGllcyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWlsZC1hY2Nlc3MtcHJvcGVydGllcy5qcy5tYXAiLCJpbXBvcnQgeyBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGdldEl0ZW0sIHVwZGF0ZUl0ZW0sIH0gZnJvbSAnQGVzcmkvYXJjZ2lzLXJlc3QtcG9ydGFsJztcbmltcG9ydCB7IGJ1aWxkQWNjZXNzUHJvcGVydGllcyB9IGZyb20gJy4vYnVpbGQtYWNjZXNzLXByb3BlcnRpZXMnO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFBvcnRhbEl0ZW1BY2Nlc3NQZXJtaXNzaW9ucyh7IGlkLCBhdXRoZW50aWNhdGlvbiwgdXNlcm5hbWUsIGFjY2Vzc0NoYW5nZXNldCwgfSkge1xuICAgIGNvbnN0IHsgcHJvcGVydGllcyA9IHt9IH0gPSBhd2FpdCBnZXRJdGVtKGlkLCB7XG4gICAgICAgIGF1dGhlbnRpY2F0aW9uLFxuICAgIH0pO1xuICAgIGNvbnN0IF9hID0gcHJvcGVydGllcy50ZWxlbWV0cnksIF9iID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2EsIHsgYXJjZ2lzOiB7IGFjY2VzczogY3VycmVudEFjY2Vzc1Byb3BlcnRpZXMgPSB7fSB9ID0ge30gfSA9IF9iLCBhZGRpdGlvbmFsVGVsZW1ldHJ5UHJvcGVydGllcyA9IF9fcmVzdChfYiwgW1wiYXJjZ2lzXCJdKTtcbiAgICBjb25zdCBhY2Nlc3NQcm9wZXJ0aWVzID0gYnVpbGRBY2Nlc3NQcm9wZXJ0aWVzKHVzZXJuYW1lLCBjdXJyZW50QWNjZXNzUHJvcGVydGllcywgYWNjZXNzQ2hhbmdlc2V0KTtcbiAgICByZXR1cm4gdXBkYXRlSXRlbSh7XG4gICAgICAgIGl0ZW06IHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgcHJvcGVydGllczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0aWVzKSwgeyB0ZWxlbWV0cnk6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYWRkaXRpb25hbFRlbGVtZXRyeVByb3BlcnRpZXMpLCB7IGFyY2dpczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzOiBPYmplY3QuYXNzaWduKHt9LCBhY2Nlc3NQcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgICAgICAgICAgfSB9KSB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0aGVudGljYXRpb24sXG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXQtcG9ydGFsLWl0ZW0tYWNjZXNzLXBlcm1pc3Npb25zLmpzLm1hcCIsImltcG9ydCB7IGdldEl0ZW0gfSBmcm9tICdAZXNyaS9hcmNnaXMtcmVzdC1wb3J0YWwnO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBvcnRhbEl0ZW1BY2Nlc3NQZXJtaXNzaW9ucyh7IGlkLCBhdXRoZW50aWNhdGlvbiwgfSkge1xuICAgIGNvbnN0IHsgcHJvcGVydGllczogeyB0ZWxlbWV0cnk6IHsgYXJjZ2lzOiB7IGFjY2VzcyA9IHt9IH0gPSB7fSB9ID0ge30gfSwgfSA9IGF3YWl0IGdldEl0ZW0oaWQsIHtcbiAgICAgICAgYXV0aGVudGljYXRpb24sXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgYWNjZXNzIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXQtcG9ydGFsLWl0ZW0tYWNjZXNzLXBlcm1pc3Npb25zLmpzLm1hcCIsImltcG9ydCB7IGdldENyZWRlbnRpYWxzIH0gZnJvbSAnLi9hdXRoJztcbmltcG9ydCB7IGNyZWF0ZUV2ZW50TG9nIH0gZnJvbSAnLi9jcmVhdGUtZXZlbnQtbG9nJztcbmltcG9ydCB7IGNyZWF0ZVBhZ2VWaWV3TG9nIH0gZnJvbSAnLi9jcmVhdGUtcGFnZS12aWV3LWxvZyc7XG5pbXBvcnQgQW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQgYXdzUGlucG9pbnRQbHVnaW4gZnJvbSAnQGFuYWx5dGljcy9hd3MtcGlucG9pbnQnO1xuaW1wb3J0IHsgc2V0UG9ydGFsSXRlbUFjY2Vzc1Blcm1pc3Npb25zIH0gZnJvbSAnLi9zZXQtcG9ydGFsLWl0ZW0tYWNjZXNzLXBlcm1pc3Npb25zJztcbmltcG9ydCB7IGdldFBvcnRhbEl0ZW1BY2Nlc3NQZXJtaXNzaW9ucyB9IGZyb20gJy4vZ2V0LXBvcnRhbC1pdGVtLWFjY2Vzcy1wZXJtaXNzaW9ucyc7XG4vKipcbiAqIEFtYXpvbiB0ZWxlbWV0cnkgY2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIEFtYXpvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLm5hbWUgPSAnYW1hem9uJztcbiAgICAgICAgY29uc3QgeyBhcHAgPSB7fSwgZmlwcywgdXNlclBvb2xJRCB9ID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5hbmFseXRpY3MgPSBBbmFseXRpY3Moe1xuICAgICAgICAgICAgYXBwOiBhcHAubmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IGFwcC52ZXJzaW9uLFxuICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgIGF3c1BpbnBvaW50UGx1Z2luKHtcbiAgICAgICAgICAgICAgICAgICAgZmlwcyxcbiAgICAgICAgICAgICAgICAgICAgcGlucG9pbnRBcHBJZDogYXBwLmlkLFxuICAgICAgICAgICAgICAgICAgICBnZXRDcmVkZW50aWFsczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENyZWRlbnRpYWxzKHVzZXJQb29sSUQsIHsgZmlwcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzZXRBY2Nlc3NQZXJtaXNzaW9ucyh7IGlkLCBhdXRoZW50aWNhdGlvbiwgdXNlcm5hbWUsIGFjY2Vzc0NoYW5nZXNldCwgfSkge1xuICAgICAgICByZXR1cm4gc2V0UG9ydGFsSXRlbUFjY2Vzc1Blcm1pc3Npb25zKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgYXV0aGVudGljYXRpb24sXG4gICAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICAgIGFjY2Vzc0NoYW5nZXNldCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBnZXRBY2Nlc3NQZXJtaXNzaW9ucyh7IGlkLCBhdXRoZW50aWNhdGlvbiwgfSkge1xuICAgICAgICByZXR1cm4gZ2V0UG9ydGFsSXRlbUFjY2Vzc1Blcm1pc3Npb25zKHsgaWQsIGF1dGhlbnRpY2F0aW9uIH0pO1xuICAgIH1cbiAgICBsb2dQYWdlVmlldyhwYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHRlbGVtZXRyeVBheWxvYWQgPSBjcmVhdGVQYWdlVmlld0xvZyh7XG4gICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgcHJldmlvdXNQYWdlOiB0aGlzLnByZXZpb3VzUGFnZSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBkaW1lbnNpb25Mb29rdXA6IHRoaXMuZGltZW5zaW9ucyxcbiAgICAgICAgICAgIG1ldHJpY0xvb2t1cDogdGhpcy5tZXRyaWNzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgeyBwYWdlVXJsLCBwYWdlTmFtZSB9ID0gdGVsZW1ldHJ5UGF5bG9hZDtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB7IHBhZ2VVcmwsIHBhZ2VOYW1lIH07XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzLnRyYWNrKCdwYWdlVmlldycsIHRlbGVtZXRyeVBheWxvYWQpO1xuICAgIH1cbiAgICBsb2dFdmVudChldmVudCA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHRlbGVtZXRyeVBheWxvYWQgPSBjcmVhdGVFdmVudExvZyh7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGRpbWVuc2lvbkxvb2t1cDogdGhpcy5kaW1lbnNpb25zLFxuICAgICAgICAgICAgbWV0cmljTG9va3VwOiB0aGlzLm1ldHJpY3MsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB7IG5hbWUgfSA9IHRlbGVtZXRyeVBheWxvYWQ7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzLnRyYWNrKG5hbWUsIHRlbGVtZXRyeVBheWxvYWQpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgMjAyNSBFc3JpXHJcbiAqXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAqXHJcbiAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKlxyXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHR5cGUgVDluU3RyaW5ncyBmcm9tICcuL2Fzc2V0cy90OW4vbWVzc2FnZXMuZW4uanNvbic7XHJcbmltcG9ydCB7IFRlbGVtZXRyeSB9IGZyb20gJ0Blc3JpL3RlbGVtZXRyeSc7XHJcbmltcG9ydCB7IEdvb2dsZUFuYWx5dGljcyB9IGZyb20gJ0Blc3JpL3RlbGVtZXRyeS1nb29nbGUtYW5hbHl0aWNzJztcclxuaW1wb3J0IHsgQW1hem9uIH0gZnJvbSAnQGVzcmkvdGVsZW1ldHJ5LWFtYXpvbic7XHJcbmltcG9ydCB0eXBlIHsgSUNvbnNlbnRSZXNwb25zZSB9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyB1c2VUOW4gfSBmcm9tICcuLi8uLi9jb250cm9sbGVycy91c2VUOW4nO1xyXG5pbXBvcnQge1xyXG4gIExpdEVsZW1lbnQsXHJcbiAgcHJvcGVydHksXHJcbiAgY3JlYXRlRXZlbnQsXHJcbiAgRnJhZ21lbnQsXHJcbiAgbWV0aG9kLFxyXG4gIHN0YXRlLFxyXG59IGZyb20gJ0BhcmNnaXMvbHVtaW5hJztcclxuaW1wb3J0IHR5cGUge1xyXG4gIEpzeE5vZGUsXHJcbn0gZnJvbSAnQGFyY2dpcy9sdW1pbmEnO1xyXG5pbXBvcnQgeyBzdHlsZXMgfSBmcm9tICcuL2NvbnNlbnQtbWFuYWdlci5jc3MnO1xyXG5pbXBvcnQgdHlwZSB7IFBvcnRhbCwgVGVsZW1ldHJ5T3B0aW9ucyB9IGZyb20gJ0Blc3JpL3RlbGVtZXRyeS9kaXN0L3R5cGVzL3R5cGVzJztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgRGVjbGFyZUVsZW1lbnRzIHtcclxuICAgICdjb25zZW50LW1hbmFnZXInOiBDb25zZW50TWFuYWdlcjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb25zZW50TWFuYWdlciBleHRlbmRzIExpdEVsZW1lbnQge1xyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgT3ZlcnJpZGVzIChpbnRlcm5hbClcclxuICAvL1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IHN0eWxlcztcclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gIFByb3BlcnRpZXMgKHB1YmxpYylcclxuICAvL1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqIHN0cmluZzogVGhlIGFwcCBpZCBmb3IgdGhlIGFtYXpvbiB0cmFja2luZyBpbnN0YW5jZSAqL1xyXG4gIEBwcm9wZXJ0eSgpIGFtYXpvbkFwcElkID0gXCJcIjtcclxuXHJcbiAgLyoqIHN0cmluZzogVGhlIGFwcCBuYW1lIGZvciB0aGUgYW1hem9uIHRyYWNraW5nIGluc3RhbmNlICovXHJcbiAgQHByb3BlcnR5KCkgYW1hem9uQXBwTmFtZSA9IFwiXCI7XHJcblxyXG4gIC8qKiBzdHJpbmc6IFRoZSB1c2VyIHBvb2wgaWQgZm9yIHRoZSBhbWF6b24gdHJhY2tpbmcgaW5zdGFuY2UgKi9cclxuICBAcHJvcGVydHkoKSBhbWF6b25Vc2VyUG9vbElEID0gXCJcIjtcclxuXHJcbiAgLyoqIHN0cmluZzogVGhlIHZlcnNpb24gZm9yIHRoZSBhbWF6b24gdHJhY2tpbmcgaW5zdGFuY2UgKi9cclxuICBAcHJvcGVydHkoKSBhbWF6b25WZXJzaW9uID0gXCJcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogc3RyaW5nOiBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSB2YXJpYWJsZSBzdG9yZWQgaW4gdGhlIGJyb3dzZXJzIGxvY2FsIHN0b3JnZSB0aGF0XHJcbiAgICogd2lsbCBrZWVwIHRyYWNrIG9mIHRoZSB1c2VycyBjaG9pY2UgZm9yIGNvbnNlbnRcclxuICAgKiBUT0RPOiBbTUlHUkFUSU9OXSBUaGlzIHByb3BlcnR5IHdhcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4geW91ciBTdGVuY2lsIGNvbXBvbmVudC4gSWYgeW91IGRpZG4ndCBtZWFuIGl0IHRvIGJlIHJlcXVpcmVkLCBmZWVsIGZyZWUgdG8gcmVtb3ZlIGBAcmVxdWlyZWRgIHRhZy5cclxuICAgKiBPdGhlcndpc2UsIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gYWJvdXQgcmVxdWlyZWQgcHJvcGVydGllczogaHR0cHM6Ly9xYXdlYmdpcy5lc3JpLmNvbS9jb21wb25lbnRzL2x1bWluYS9wcm9wZXJ0aWVzI3N0cmluZy1wcm9wZXJ0aWVzXHJcbiAgICpcclxuICAgKiBAcmVxdWlyZWRcclxuICAgKi9cclxuICBAcHJvcGVydHkoKSBmaXJzdFVzZVZhciA9IFwiXCI7XHJcblxyXG4gIC8qKiBzdHJpbmdbXTogQW55IGlkcyBmb3IgdGhlIGFuYWx5dGljcyBjb25maWd1cmVkIHRvIHJlY2VpdmUgZXZlbnRzIGZyb20gdGhlIHRlbGVtZXR5IGluc3RhbmNlICovXHJcbiAgQHByb3BlcnR5KCkgbWVhc3VyZW1lbnRJZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8qKiBlc3JpL3BvcnRhbC9Qb3J0YWw6IGh0dHBzOi8vZGV2ZWxvcGVycy5hcmNnaXMuY29tL2phdmFzY3JpcHQvbGF0ZXN0L2FwaS1yZWZlcmVuY2UvZXNyaS1wb3J0YWwtUG9ydGFsLmh0bWwgKi9cclxuICBAcHJvcGVydHkoKSBwb3J0YWw6IF9fZXNyaS5Qb3J0YWwgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICBTdGF0ZSAoaW50ZXJuYWwpXHJcbiAgLy9cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBib29sZWFuOiBXaGVuIHRydWUgdGhlIGFsZXJ0IHNob3VsZCBiZSBvcGVuZWQgKi9cclxuICBAc3RhdGUoKSBfb3BlbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDb250YWlucyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGlzIGNvbXBvbmVudC5cclxuICAgKiBBbGwgVUkgc3RyaW5ncyBzaG91bGQgYmUgZGVmaW5lZCBoZXJlLlxyXG4gICAqL1xyXG4gIEBzdGF0ZSgpIF90cmFuc2xhdGlvbnMgPSB1c2VUOW48dHlwZW9mIFQ5blN0cmluZ3M+KHtuYW1lOiBcImNvbnNlbnQtbWFuYWdlclwiLCBibG9ja2luZzogdHJ1ZX0pO1xyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgUHJvcGVydGllcyAocHJvdGVjdGVkKVxyXG4gIC8vXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKiogYm9vbGVhbjogV2hlbiB0cnVlIHRoZSB0ZWxlbWV0cnkgaW5zdGFuY2UgaGFzIGJlZW4gbG9hZGVkICovXHJcbiAgcHJvdGVjdGVkIF9sb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGVsZW1ldHJ5OiBUaGUgdGVsZW1ldHJ5IGluc3RhbmNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9nIGV2ZW50cyBieSB0aGUgY29uc3VtaW5nIGFwcGxpY2F0aW9uXHJcbiAgICogaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQGVzcmkvdGVsZW1ldHJ5XHJcbiAgICovXHJcbiAgLy8gVE9ETyBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcG9ydFxyXG4gIC8vcHJvdGVjdGVkIF90ZWxlbWV0cnlJbnN0YW5jZTogVGVsZW1ldHJ5O1xyXG4gIHByb3RlY3RlZCBfdGVsZW1ldHJ5SW5zdGFuY2U6IGFueTtcclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gIFdhdGNoIGhhbmRsZXJzXHJcbiAgLy9cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICBNZXRob2RzIChwdWJsaWMpXHJcbiAgLy9cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBJbml0aWFsaXplIGFuZCByZXR1cm4gdGhlIHRlbGVtZXRyeSBpbnN0YW5jZSBpZiBjb25zZW50IGhhcyBiZWVuIGdyYW50ZWQgKi9cclxuICBAbWV0aG9kKClcclxuICBhc3luYyBnZXRJbnN0YW5jZSgpOiBQcm9taXNlPFRlbGVtZXRyeSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZmlyc3RVc2VWYXIpID09PSAndHJ1ZScgfHwgdGhpcy5wb3J0YWw/LmV1ZWlFbmFibGVkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2luaXQoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeUluc3RhbmNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICBFdmVudHMgKHB1YmxpYylcclxuICAvL1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqIEVtaXR0ZWQgb24gZGVtYW5kIHdoZW4gdGhlIHVzZXIgYWNjZXB0cyBvciBkZW5pZXMgY29uc2VudCAqL1xyXG4gIGNvbnNlbnRHcmFudGVkID0gY3JlYXRlRXZlbnQ8SUNvbnNlbnRSZXNwb25zZT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3RlbmNpbEpTOiBDYWxsZWQgb25jZSBqdXN0IGFmdGVyIHRoZSBjb21wb25lbnQgaXMgZmlyc3QgY29ubmVjdGVkIHRvIHRoZSBET00uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHdoZW4gY29tcGxldGVcclxuICAgKi9cclxuICBhc3luYyBsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fb3BlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZmlyc3RVc2VWYXIpID09PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlbmRlcnMgdGhlIGNvbXBvbmVudC4gKi9cclxuICBvdmVycmlkZSByZW5kZXIoKTogSnN4Tm9kZSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIHsvKiBOb3QgdXNpbmcgZm9yIG5vdy4uLndpbGwganVzdCByZWx5IG9uIHRoZSBvcmdzIGV1ZWkgc2V0dGluZy4gKi99XHJcbiAgICAgICAgey8qIFJldGFpbmluZyB0aGlzIGNvZGUgZm9yIGZ1dHVyZSB1c2UgdGhvdWdoLiAqL31cclxuICAgICAgICB7LyogPGNhbGNpdGUtYWxlcnRcclxuICAgICAgICAgICAgICAgIGtpbmQ9XCJicmFuZFwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD17dGhpcy5fdHJhbnNsYXRpb25zLnRyYWNraW5nQWxlcnRMYWJlbH1cclxuICAgICAgICAgICAgICAgIG9uQ2FsY2l0ZUFsZXJ0Q2xvc2U9eygpID0+IHRoaXMuX2FsZXJ0Q2xvc2VkKCl9XHJcbiAgICAgICAgICAgICAgICBvcGVuPXt0aGlzLl9vcGVufVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgc2xvdD1cIm1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAge3RoaXMuX3RyYW5zbGF0aW9ucy5tZXNzYWdlfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8Y2FsY2l0ZS1idXR0b25cclxuICAgICAgICAgICAgICAgICAgYWxpZ25tZW50PVwiY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNvbGlkXCJcclxuICAgICAgICAgICAgICAgICAga2luZD1cImJyYW5kXCJcclxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5fYWNjZXB0KCl9XHJcbiAgICAgICAgICAgICAgICAgIHNjYWxlPVwibVwiXHJcbiAgICAgICAgICAgICAgICAgIHNsb3Q9XCJhY3Rpb25zLWVuZFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luOiBcImF1dG9cIn19XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7dGhpcy5fdHJhbnNsYXRpb25zLmFjY2VwdH1cclxuICAgICAgICAgICAgICAgIDwvY2FsY2l0ZS1idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9jYWxjaXRlLWFsZXJ0PiAqL31cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIG9uY2UgYWZ0ZXIgdGhlIGNvbXBvbmVudCBpcyBsb2FkZWRcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFByb21pc2Ugd2hlbiBjb21wbGV0ZVxyXG4gICAqL1xyXG4gIGxvYWRlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc2VudEdyYW50ZWQuZW1pdCh7XHJcbiAgICAgIGdyYW50ZWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZmlyc3RVc2VWYXIpID09PSAndHJ1ZScsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICBGdW5jdGlvbnMgKHByb3RlY3RlZClcclxuICAvL1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgY29tcG9uZW50J3MgdHJhbnNsYXRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHdoZW4gY29tcGxldGVcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFzeW5jIF9pbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLl9sb2FkZWQpIHtcclxuICAgICAgY29uc3Qgb3B0aW9uczogVGVsZW1ldHJ5T3B0aW9ucyA9IHtcclxuICAgICAgICBwbHVnaW5zOiBbXSBhcyBhbnlbXSxcclxuICAgICAgICBwb3J0YWw6IHRoaXMucG9ydGFsIGFzIFBvcnRhbCxcclxuICAgICAgfTtcclxuICAgICAgaWYgKHRoaXMubWVhc3VyZW1lbnRJZHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9kZXZ0b3BpYS5lc3JpLmNvbS9XZWJHSVMvYXJjZ2lzLXRlbGVtZXRyeS5qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy90ZWxlbWV0cnktZ29vZ2xlLWFuYWx5dGljcy9SRUFETUUubWQgZm9yIG9wdGlvbnNcclxuICAgICAgICBjb25zdCBnb29nbGVBbmFseXRpY3NUcmFja2VyID0gbmV3IEdvb2dsZUFuYWx5dGljcyh7XHJcbiAgICAgICAgICBtZWFzdXJlbWVudElkczogdGhpcy5tZWFzdXJlbWVudElkcyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBvcHRpb25zLnBsdWdpbnMhLnB1c2goZ29vZ2xlQW5hbHl0aWNzVHJhY2tlcik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYW1hem9uVXNlclBvb2xJRCkge1xyXG4gICAgICAgIC8vIHNlZSBodHRwczovL2RldnRvcGlhLmVzcmkuY29tL1dlYkdJUy9hcmNnaXMtdGVsZW1ldHJ5LmpzL3RyZWUvbWFzdGVyL3BhY2thZ2VzL3RlbGVtZXRyeS1hbWF6b24vUkVBRE1FLm1kIGZvciBvcHRpb25zXHJcbiAgICAgICAgY29uc3QgYW1hem9uVHJhY2tlciA9IG5ldyBBbWF6b24oe1xyXG4gICAgICAgICAgdXNlclBvb2xJRDogdGhpcy5hbWF6b25Vc2VyUG9vbElELFxyXG4gICAgICAgICAgYXBwOiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuYW1hem9uQXBwTmFtZSxcclxuICAgICAgICAgICAgaWQ6IHRoaXMuYW1hem9uQXBwSWQsXHJcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMuYW1hem9uVmVyc2lvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb3B0aW9ucy5wbHVnaW5zIS5wdXNoKGFtYXpvblRyYWNrZXIgYXMgYW55KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl90ZWxlbWV0cnlJbnN0YW5jZSA9IG5ldyBUZWxlbWV0cnkob3B0aW9ucyk7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3RlbGVtZXRyeUluc3RhbmNlLmluaXQoKTtcclxuICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBTZXQgdGhlIG9wZW4gcHJvcCB0byBmYWxzZSB3aGVuIHRoZSBhbGVydCBpcyBjbG9zZWQgKi9cclxuICBwcm90ZWN0ZWQgX2FsZXJ0Q2xvc2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3BlbiA9IGZhbHNlO1xyXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZmlyc3RVc2VWYXIpICE9PSAndHJ1ZScpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5maXJzdFVzZVZhciwgJ2ZhbHNlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSB0aGUgdXNlcnMgZ3JhbnRpbmcgb2YgY29uc2VudFxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfYWNjZXB0KCk6IHZvaWQge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5maXJzdFVzZVZhciwgJ3RydWUnKTtcclxuICAgIHRoaXMuY29uc2VudEdyYW50ZWQuZW1pdCh7XHJcbiAgICAgIGdyYW50ZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX29wZW4gPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbInNob3VsZERpc2FibGVUcmFja2luZyIsIm9wdGlvbnMiLCJkaXNhYmxlZCIsInBvcnRhbCIsImhhc0V1ZWlFbmFibGVkQW5kSXNNZW1iZXJPZk9yZyIsImlzUmVnaXN0ZXJlZFVzZXJXaXRob3V0T3JnSW5VU0EiLCJpc0Fub255bW91c1VzZXJJblVTQSIsInN0b3JhZ2UiLCJrZXkiLCJzdG9yZWQiLCJ2YWx1ZSIsInZhbHVlVG9TdHJpbmciLCJFU1JJX1RFTEVNRVRSWV9EQVRBX0FUVFJJQlVURSIsImluamVjdFNjcmlwdEVsZW1lbnRBc3luYyIsImF0dHJpYnV0ZXMiLCJyZXNvbHZlIiwicmVqZWN0IiwiaW5qZWN0U2NyaXB0RWxlbWVudCIsInNjcmlwdEV4aXN0cyIsImlkIiwiZGF0YUF0dHJpYnV0ZSIsImJvZHkiLCJzcmMiLCJzZWN0aW9uIiwidHlwZSIsImFzeW5jIiwiZGVmZXIiLCJvbmxvYWQiLCJvbmVycm9yIiwiV2luZG93VW5kZWZpbmVkRXJyb3IiLCJzY3JpcHRFbGVtZW50IiwiY3JlYXRlU2NyaXB0RWxlbWVudFdpdGhBdHRyaWJ1dGVzIiwiY3JlYXRlU2NyaXB0VGFncyIsInNjcmlwdHMiLCJzY3JpcHRPYmoiLCJhdHRycyIsImF0dHIiLCJhdHRyTmFtZSIsIklOVEVSTkFMX09SR1MiLCJUZWxlbWV0cnkiLCJfYSIsIl9iIiwiX2MiLCJ1c2VyIiwidHJhY2tlciIsInByb21pc2VzIiwib3JnVHlwZSIsImludGVybmFsRG9tYWluIiwiZG9tYWluIiwib3JnIiwicGFnZSIsImV2ZW50IiwiZW5hYmxlZFRyYWNrZXJzIiwiaGFzRXJyb3IiLCJldmVudEF0dHJpYnV0ZXMiLCJuYW1lIiwid29ya2Zsb3ciLCJ3b3JrZmxvd09iaiIsInN0ZXAiLCJkZXRhaWxzIiwid29ya2Zsb3dBZ2UiLCJ0aW1lb3V0IiwidHJhY2siLCJ1c2VyTWV0YWRhdGEiLCJtYWtlRXZlbnRQYXlsb2FkIiwidHJhY2tlck5hbWUiLCJvbWl0Q29tcGxleERhdGEiLCJsb2dnZXIiLCJhY2MiLCJ2YWwiLCJpc1ByaW1pdGl2ZSIsIl9fcmVzdCIsInMiLCJlIiwidCIsInAiLCJHb29nbGVBbmFseXRpY3MiLCJjbGVhbmVkT3B0aW9ucyIsInBhZ2VWaWV3T3B0aW9uc09iamVjdCIsImFjdGlvbiIsImN1c3RvbVBhcmFtcyIsImV2ZW50VHlwZSIsImV2ZW50UGFyYW1zIiwiY29uZmlnT3B0aW9ucyIsIm1lYXN1cmVtZW50SWQiLCJjbGVhbmVkRXZlbnRQYXJhbXMiLCJjYXRlZ29yeSIsImxhYmVsIiwibWV0cmljQW5kRGltZW5zaW9uc01hcCIsIm1ldHJpY0FuZERpbWVuc2lvbk5hbWVzIiwiY3VyIiwiZGltZW5zaW9ucyIsIm1ldHJpY3MiLCJtZXRyaWNzTWFwIiwiZGltZW5zaW9uc01hcCIsIkNPR05JVE9fS0VZIiwiZ2V0Q3JlZGVudGlhbHMiLCJJZGVudGl0eVBvb2xJZCIsIkNPR05JVE9fVVJMIiwiY2FjaGVkIiwiZmV0Y2hPcHRpb25zIiwicmVzcG9uc2UiLCJJZGVudGl0eUlkIiwiQ3JlZGVudGlhbHMiLCJmb3JtYXRUZWxlbWV0cnlBdHRyaWJ1dGVzIiwidGVsZW1ldHJ5RGF0YSIsImRpbWVuc2lvbkxvb2t1cCIsImV4Y2x1ZGVLZXlzIiwiZ2V0Q3VzdG9tRGltZW5zaW9uS2V5IiwiZ2V0VmFsdWUiLCJkYXRhIiwibG9va3VwIiwiTUVUUklDUyIsImZvcm1hdFRlbGVtZXRyeU1ldHJpY3MiLCJtZXRyaWNMb29rdXAiLCJnZXRDdXN0b21NZXRyaWNLZXkiLCJjcmVhdGVFdmVudExvZyIsImV2ZW50UGF0aG5hbWUiLCJ0ZWxlbWV0cnlQYXlsb2FkIiwiY3JlYXRlUGFnZVZpZXdMb2ciLCJwcmV2aW91c1BhZ2UiLCJyZWZlcnJlciIsInRpdGxlIiwiaG9zdG5hbWUiLCJwYXRobmFtZSIsImRvdFByb3AiLCJsIiwiciIsIm4iLCJvIiwidSIsImMiLCJpIiwiYSIsImciLCJPIiwiUyIsImoiLCJBIiwiRSIsIlAiLCIkIiwiTSIsIlUiLCJIIiwiSiIsIlkiLCJ5biIsIlIiLCJWIiwiVyIsInEiLCJubiIsInJuIiwiaG4iLCJTbiIsIiRuIiwiVG4iLCJfbiIsIkhuIiwibSIsImIiLCJmIiwiaCIsInoiLCJDIiwiXyIsIkwiLCJ4IiwiRyIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwiYXJyMiIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJpdGVyIiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibWluTGVuIiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX3R5cGVvZiIsIm9iaiIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsIl9uZXh0IiwiX3Rocm93IiwiYXJnIiwiaW5mbyIsImVycm9yIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsInNlbGYiLCJhcmdzIiwiZXJyIiwiX2RlZmluZVByb3BlcnR5Iiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwia2V5cyIsInN5bWJvbHMiLCJzeW0iLCJfb2JqZWN0U3ByZWFkMiIsInRhcmdldCIsInNvdXJjZSIsInJ1bnRpbWUiLCJtb2R1bGUiLCJleHBvcnRzIiwiT3AiLCJoYXNPd24iLCJ1bmRlZmluZWQkMSIsIiRTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJ0b1N0cmluZ1RhZ1N5bWJvbCIsImRlZmluZSIsIndyYXAiLCJpbm5lckZuIiwib3V0ZXJGbiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJjb250ZXh0IiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsIkdlblN0YXRlU3VzcGVuZGVkU3RhcnQiLCJHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkIiwiR2VuU3RhdGVFeGVjdXRpbmciLCJHZW5TdGF0ZUNvbXBsZXRlZCIsIkNvbnRpbnVlU2VudGluZWwiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJnZXRQcm90byIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJwcm90b3R5cGUiLCJtZXRob2QiLCJnZW5GdW4iLCJjdG9yIiwiQXN5bmNJdGVyYXRvciIsIlByb21pc2VJbXBsIiwiaW52b2tlIiwicmVjb3JkIiwicmVzdWx0IiwidW53cmFwcGVkIiwicHJldmlvdXNQcm9taXNlIiwiZW5xdWV1ZSIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwic3RhdGUiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGUiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwiZW50cnkiLCJyZXNldFRyeUVudHJ5IiwibmV4dCIsIml0ZXJhYmxlIiwiaXRlcmF0b3JNZXRob2QiLCJza2lwVGVtcFJlc2V0Iiwicm9vdEVudHJ5Iiwicm9vdFJlY29yZCIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImZpbmFsbHlFbnRyeSIsImFmdGVyTG9jIiwiZmluYWxseUxvYyIsInRyeUxvYyIsInRocm93biIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwicmVnZW5lcmF0b3IiLCJGVU5DIiwiVU5ERUYiLCJSRURVQ0VSIiwiYmFzZSIsIkFDVElPTl9JTklUIiwiQUNUSU9OX1RFU1QiLCIkJG9ic2VydmFibGUiLCJtc2ciLCJjcmVhdGVTdG9yZSIsInJlZHVjZXIiLCJwcmVsb2FkZWRTdGF0ZSIsImVuaGFuY2VyIiwiY3VycmVudFJlZHVjZXIiLCJjdXJyZW50U3RhdGUiLCJjdXJyZW50TGlzdGVuZXJzIiwibmV4dExpc3RlbmVycyIsImlzRGlzcGF0Y2hpbmciLCJlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJsaXN0ZW5lciIsImlzU3Vic2NyaWJlZCIsImluZGV4IiwiZGlzcGF0Y2giLCJpc09iamVjdCIsImxpc3RlbmVycyIsInJlcGxhY2VSZWR1Y2VyIiwibmV4dFJlZHVjZXIiLCJvYnNlcnZhYmxlIiwib3V0ZXJTdWJzY3JpYmUiLCJvYnNlcnZlciIsIm9ic2VydmVTdGF0ZSIsInVuc3Vic2NyaWJlIiwiZ2V0VW5kZWZpbmVkU3RhdGVFcnJvck1lc3NhZ2UiLCJhY3Rpb25UeXBlIiwiYWN0aW9uTmFtZSIsImFzc2VydFJlZHVjZXJTaGFwZSIsInJlZHVjZXJzIiwiaW5pdGlhbFN0YXRlIiwiY29tYmluZVJlZHVjZXJzIiwicmVkdWNlcktleXMiLCJmaW5hbFJlZHVjZXJzIiwiZmluYWxSZWR1Y2VyS2V5cyIsInNoYXBlQXNzZXJ0aW9uRXJyb3IiLCJoYXNDaGFuZ2VkIiwibmV4dFN0YXRlIiwiX2kiLCJfa2V5IiwicHJldmlvdXNTdGF0ZUZvcktleSIsIm5leHRTdGF0ZUZvcktleSIsImVycm9yTWVzc2FnZSIsImNvbXBvc2UiLCJfbGVuIiwiZnVuY3MiLCJhcHBseU1pZGRsZXdhcmUiLCJtaWRkbGV3YXJlcyIsInN0b3JlIiwiX2Rpc3BhdGNoIiwiY2hhaW4iLCJtaWRkbGV3YXJlQVBJIiwibWlkZGxld2FyZSIsIkFOT05fSUQiLCJQUkVGSVgiLCJVU0VSX0lEIiwiVVNFUl9UUkFJVFMiLCJMSUJfTkFNRSIsIklEIiwiQU5PTklEIiwiRVJST1JfVVJMIiwiY29yZUV2ZW50cyIsIm5vbkV2ZW50cyIsInBsdWdpbkV2ZW50cyIsIkVWRU5UUyIsImN1cnIiLCJFVkVOVFMkMSIsImlzUmVzZXJ2ZWRBY3Rpb24iLCJ1dG1SZWdleCIsInByb3BSZWdleCIsInRyYWl0UmVnZXgiLCJpbml0aWFsaXplTWlkZGxld2FyZSIsImluc3RhbmNlIiwic2V0SXRlbSIsInBhcmFtcyIsInBlcnNpc3RlZFVzZXIiLCJpbml0aWFsVXNlciIsImlzS25vd25JZCIsInBhcmFtc0FycmF5IiwiYW5fdWlkIiwiYW5fZXZlbnQiLCJncm91cGVkUGFyYW1zIiwiY2xlYW5OYW1lIiwia2V5TmFtZSIsInVzZXJSZWR1Y2VyIiwiZ2V0UGVyc2lzdGVkVXNlckRhdGEiLCJ0ZW1wS2V5IiwiZ2V0VXNlclByb3BGdW5jIiwicGF5bG9hZCIsImN1cnJlbnRJZCIsInBlcnNpc3RlZEluZm8iLCJnZXQiLCJpZGVudGlmeU1pZGRsZXdhcmUiLCJfaW5zdGFuY2Ukc3RvcmFnZSIsInJlbW92ZUl0ZW0iLCJnZXRJdGVtIiwidXNlcklkIiwidHJhaXRzIiwicmVtb3ZlIiwidXVpZCIsImN1cnJlbnRUcmFpdHMiLCJzdGFjayIsInJ1bkNhbGxiYWNrIiwiaXNGdW5jdGlvbiIsIndhaXRGb3JSZWFkeSIsInByZWRpY2F0ZSIsInBhdXNlIiwibXMiLCJwcm9jZXNzUXVldWUiLCJnZXRQbHVnaW5zIiwicGx1Z2luTWV0aG9kcyIsIl9zdG9yZSRnZXRTdGF0ZSIsInBsdWdpbnMiLCJxdWV1ZSIsImlzT25saW5lIiwicGlwZWxpbmUiLCJpdGVtIiwiaXNMb2FkZWQiLCJwcm9jZXNzQWN0aW9uIiwiY3VycmVudFBsdWdpbiIsImN1cnJlbnRNZXRob2QiLCJlbnJpY2hlZFBheWxvYWQiLCJlbnJpY2giLCJwbHVnaW5FdmVudCIsInJlUXVldWVBY3Rpb25zIiwiaGVhcnRCZWF0IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX2FyciIsIl9kIiwiX3MiLCJfZSIsIl9ub25JdGVyYWJsZVJlc3QiLCJfc2xpY2VkVG9BcnJheSIsImZpdGxlckRpc2FibGVkUGx1Z2lucyIsImFsbFBsdWdpbnMiLCJzZXR0aW5ncyIsImZyb21DYWxsT3B0aW9ucyIsImlzQm9vbGVhbiIsImVuZHNXaXRoU3RhcnRSZWdleCIsImJvb3RzdHJhcFJlZ2V4IiwicmVhZHlSZWdleCIsInJ1blBsdWdpbnMiLCJfeCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl9yZWYiLCJfY2FsbGVlIiwiZXZlbnRzSW5mbyIsInBsdWdpbk9iamVjdCIsIm9yaWdpbmFsVHlwZSIsInVwZGF0ZWRUeXBlIiwiYWN0aXZlUGx1Z2lucyIsImFsbEFjdGl2ZVBsdWdpbktleXMiLCJhbGxNYXRjaGVzIiwiYWN0aW9uQmVmb3JlIiwiYWN0aW9uRHVyaW5nIiwiYWZ0ZXJOYW1lIiwiYWN0aW9uQWZ0ZXIiLCJfY29udGV4dCIsImdldEFsbE1hdGNoaW5nQ2FsbHMiLCJwcm9jZXNzRXZlbnQiLCJzaG91bGRBYm9ydEFsbCIsIl94NiIsIl9wcm9jZXNzRXZlbnQiLCJfY2FsbGVlNSIsIl9yZWYyIiwiaXNTdGFydEV2ZW50IiwiYWJvcnRhYmxlIiwibWFrZUFyZ3MiLCJxdWV1ZURhdGEiLCJwYXlsb2FkcyIsInJlc29sdmVkQWN0aW9uIiwiZW5kQWN0aW9uIiwiX2NvbnRleHQ1IiwiYXJndW1lbnRGYWN0b3J5IiwidGhpbmciLCJwbHVnaW5OYW1lIiwibWV0aG9kTmFtZSIsImFkZFRvUXVldWUiLCJfcmVmNiIsIl9jYWxsZWUzIiwic2NvcGVkIiwiY3VyU2NvcGUiLCJzY29wZWRQYXlsb2FkIiwiX2NvbnRleHQzIiwiX3JlZjciLCJfY2FsbGVlMiIsImNvdW50IiwiY3VyU2NvcGVEYXRhIiwiZ2VuQWJvcnQiLCJyZXR1cm5WYWx1ZSIsIl9jb250ZXh0MiIsImN1cnJlbnRBY3QiLCJwbmFtZSIsIm90aGVyUGx1ZyIsInJlYXNvbiIsImNhbGxzaXRlIiwidmFsaWRhdGVNZXRob2QiLCJnZXRDb25maWciLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDciLCJfeDgiLCJfeDkiLCJfcmVmOCIsIl9jYWxsZWU0IiwicHJvbWlzZSIsImxhc3RMb29wIiwiY3VycmVudEFjdGlvblZhbHVlIiwicGF5bG9hZFZhbHVlIiwiZnVuY0FyZ3MiLCJtZXJnZWQiLCJuYW1lU3BhY2VFdmVudCIsImFjdGlvbkRlcHRoIiwidXBkYXRlZFBheWxvYWQiLCJfY29udGV4dDQiLCJzaG91bGRBYm9ydCIsImFib3J0RGlzcGF0Y2giLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJfcmVmMyIsInBvc3RGaXgiLCJhYm9ydEV2ZW50IiwicGx1Z2luU3RhdGUiLCJwbHVnaW5EYXRhIiwiZ2V0UGx1Z2luRnVuY3Rpb25zIiwicGx1Z2luIiwiZm9ybWF0TWV0aG9kIiwiZ2V0RXZlbnROYW1lcyIsIm5hbWVzcGFjZSIsImVuZCIsImV2ZW50TmFtZXMiLCJjb3JlIiwid29yZCIsIm5hbWVTcGFjZWRFdmVudHMiLCJfbmFtZVNwYWNlZEV2ZW50cyRtYXAiLCJfbmFtZVNwYWNlZEV2ZW50cyRtYXAyIiwiYmVmb3JlRnVuY3MiLCJkdXJpbmdGdW5jcyIsImFmdGVyRnVuY3MiLCJfcmVmNCIsImFib3J0IiwiaW5jbHVkZXMiLCJfcmVmNSIsInBsdWdpbnNDb3VudCIsImlzU3RyaW5nIiwiaXNBcnJheSIsImFib3J0YWJsZVBsdWdpbnMiLCJvdGhlclBsdWdpbiIsImNvbmZpZyIsImFib3J0RiIsImFib3J0RnVuY3Rpb24iLCJub3RBYm9ydGFibGVFcnJvciIsImZvcm1hdFBheWxvYWQiLCJjYWxsZXIiLCJwbHVnaW5zVG9BYm9ydCIsInRleHQiLCJnZXROYW1lU3BhY2VkQWN0aW9uIiwibWV0aG9kQ2FsbE1hdGNoZXNQbHVnaW5OYW1lc3BhY2UiLCJzdWIiLCJzdWJUZXh0Iiwic3BsaXQiLCJwbHVnaW5NaWRkbGV3YXJlIiwic3lzdGVtRXZlbnRzIiwiaXNSZWFkeSIsInVwZGF0ZWRBY3Rpb24iLCJwbHVnaW5zQXJyYXkiLCJhbGxSZWdpc3RlcmVkUGx1Z2lucyIsImNvbXBsZXRlZCIsImZhaWxlZCIsIndhaXRGb3JQbHVnaW5zVG9Mb2FkIiwidXBkYXRlZCIsImxvYWRlZCIsImQiLCJjYWxscyIsInN0b3JhZ2VNaWRkbGV3YXJlIiwiX2NyZWF0ZUNsYXNzIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2siLCJEeW5hbWljTWlkZGxld2FyZSIsIl90aGlzIiwicG9zaXRpb24iLCJhY3QiLCJjcmVhdGVSZWR1Y2VyIiwibmV3U3RhdGUiLCJnZXROYW1lRnJvbUV2ZW50VHlwZSIsImlzRW5hYmxlZCIsIl9uYW1lIiwiX3BsdWdpbiIsInRvZ2dsZVBsdWdpblN0YXR1cyIsImJhc2VOYW1lIiwic3RhdHVzIiwicGx1Z2luS2V5Iiwic2VyaWFsaXplIiwiaW5pdGlhbFN0YXRlJDMiLCJ0cmFja1JlZHVjZXIiLCJwcm9wZXJ0aWVzIiwibWV0YSIsInRyYWNrRXZlbnQiLCJpbml0aWFsU3RhdGUkMiIsInF1ZXVlUmVkdWNlciIsImFjdGlvbkNoYWluIiwiaGFzaFJlZ2V4IiwiY2Fub25pY2FsVXJsIiwiaXNCcm93c2VyIiwidGFncyIsInRhZyIsInVybFBhdGgiLCJ1cmwiLCJyZWdleCIsIm1hdGNoZXMiLCJwYXRoTWF0Y2giLCJjdXJyZW50VXJsIiwic2VhcmNoIiwiY2Fub25pY2FsIiwiZ2V0UGFnZURhdGEiLCJwYWdlRGF0YSIsIl9kb2N1bWVudCIsIl93aW5kb3ciLCJsb2NhdGlvbiIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImhhc2giLCJpbml0aWFsU3RhdGUkMSIsInZpZXdEYXRhIiwiZ2V0QnJvd3Nlck9TIiwib3MiLCJvc05hbWUiLCJsb2NhbGUiLCJ0aW1lWm9uZSIsImdldEJyb3dzZXJMb2NhbGUiLCJnZXRUaW1lWm9uZSIsImluaXRpYWxpemVkIiwiY2FtcGFpZ24iLCJleGNsdWRlSXRlbXMiLCJtYWtlQ29udGV4dCIsImN1cnJlbnQiLCJsaXN0ZW4iLCJldmVudHMiLCJmdW5jIiwidG9BZGQiLCJldiIsImNoZWNrIiwid2F0Y2giLCJjYiIsIkRlYnVnIiwic2V0Iiwib3JpZ0Rpc3BhdGNoIiwiZ2xvYmFsQ29udGV4dCIsIktFWSIsImNvbXBvc2VXaXRoRGVidWciLCJlbnN1cmVBcnJheSIsInNpbmdsZU9yQXJyYXkiLCJpc0FycmF5JDEiLCJnZXRDYWxsYmFja0Zyb21BcmdzIiwiYXJnQXJyYXkiLCJ0aW1lU3RhbXAiLCJkZWZlcnJlZFByb21pc2VSZXNvbHZlciIsInJlc29sdmVyIiwiY2FsbGJhY2siLCJnZW5lcmF0ZU1ldGEiLCJwb3NzaWJsZUNhbGxiYWNrcyIsInJpZCIsImFuYWx5dGljcyIsImN1c3RvbVJlZHVjZXJzIiwicGFyc2VkT3B0aW9ucyIsImRlZmluZWRFdmVudHMiLCJrIiwiZW5hYmxlZEZyb21NZXJnZSIsImVuYWJsZWRGcm9tUGx1Z2luQ29uZmlnIiwiYXBwZW5kQXJndW1lbnRzIiwibWV0aG9kc1RvRXZlbnRzIiwiYWxsRXZlbnRzIiwiYWxsRXZlbnRzVW5pcXVlIiwiZ2V0VXNlclByb3AiLCJjdXN0b21QbHVnaW5zIiwiYWxsUGx1Z2luRXZlbnRzIiwidW5pcXVlRXZlbnRzIiwiYWxsU3lzdGVtRXZlbnRzIiwiX0R5bmFtaWNNaWRkbGV3YXJlIiwiYWRkTWlkZGxld2FyZSIsInJlbW92ZU1pZGRsZXdhcmUiLCJkeW5hbWljTWlkZGxld2FyZXMiLCJub25BYm9ydGFibGUiLCJwYXJhbXNQYXJzZSIsInZpc2l0b3JJbmZvIiwiX2lkZW50aWZ5Iiwib3B0cyIsInJlc29sdmVkSWQiLCJpZGVudGlmeSIsIl90cmFjayIsImV2ZW50TmFtZSIsIl9wYWdlIiwic3RhcnRSZWdleCIsImJlZm9yZUhhbmRsZXIiLCJhZnRlckhhbmRsZXIiLCJiZWZvcmUiLCJhZnRlciIsImhhbmRsZXIiLCJkZXRhY2hMaXN0ZW5lciIsImFjdGlvbkRhdGEiLCJfcHJpdmF0ZSIsImRpc3BhdGNoRGF0YSIsImFub255bW91c0lkIiwiZW5yaWNoTWlkZGxld2FyZSIsInN0b3JlQVBJIiwiY29yZVJlZHVjZXJzIiwiY29tcG9zZUVuaGFuY2VycyIsImNvbXBvc2VXaXRoR2xvYmFsRGVidWciLCJkZXZUb29scyIsImluaXRpYWxDb25maWciLCJpbnRpYWxQbHVnaW5TdGF0ZSIsImVuaGFuY2VEaXNwYXRjaCIsImNhbGxiYWNrcyIsIm5ld0V2ZW50IiwicGx1Z2luS2V5cyIsImVuYWJsZWRQbHVnaW5zIiwiZGlzYWJsZWRQbHVnaW5zIiwiYm9vdHN0cmFwIiwib2ZmbGluZSIsIm5ld0FyZ3MiLCJJIiwidiIsIk4iLCJGIiwieSIsImFuYWx5dGljc0xpYiIsImRlZmF1bHRTZXR0aW5ncyIsInRvUHJpbWl0aXZlIiwidG9Qcm9wZXJ0eUtleSIsImRlZmluZVByb3BlcnR5IiwiX092ZXJsb2FkWWllbGQiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJyZWdlbmVyYXRvckRlZmluZSIsInJlcXVpcmUkJDAiLCJfcmVnZW5lcmF0b3IiLCJPdmVybG9hZFlpZWxkIiwicmVxdWlyZSQkMSIsInJlZ2VuZXJhdG9yQXN5bmNJdGVyYXRvciIsIl9yZWdlbmVyYXRvckFzeW5jR2VuIiwicmVnZW5lcmF0b3JBc3luY0dlbiIsIl9yZWdlbmVyYXRvckFzeW5jIiwiX3JlZ2VuZXJhdG9yS2V5cyIsIl9yZWdlbmVyYXRvclZhbHVlcyIsInJlZ2VuZXJhdG9yQXN5bmMiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZWdlbmVyYXRvcktleXMiLCJyZXF1aXJlJCQ1IiwicmVnZW5lcmF0b3JWYWx1ZXMiLCJyZXF1aXJlJCQ2IiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIl90IiwidyIsIkQiLCJpc01lcmdlYWJsZU9iamVjdCIsImlzTm9uTnVsbE9iamVjdCIsImlzU3BlY2lhbCIsInN0cmluZ1ZhbHVlIiwiaXNSZWFjdEVsZW1lbnQiLCJjYW5Vc2VTeW1ib2wiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJlbXB0eVRhcmdldCIsImNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkIiwiZGVlcG1lcmdlIiwiZGVmYXVsdEFycmF5TWVyZ2UiLCJlbGVtZW50IiwiZ2V0TWVyZ2VGdW5jdGlvbiIsImN1c3RvbU1lcmdlIiwiZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbCIsImdldEtleXMiLCJwcm9wZXJ0eUlzT25PYmplY3QiLCJwcm9wZXJ0eSIsInByb3BlcnR5SXNVbnNhZmUiLCJtZXJnZU9iamVjdCIsImRlc3RpbmF0aW9uIiwic291cmNlSXNBcnJheSIsInRhcmdldElzQXJyYXkiLCJzb3VyY2VBbmRUYXJnZXRUeXBlc01hdGNoIiwiYXJyYXkiLCJwcmV2IiwiZGVlcG1lcmdlXzEiLCJjanMiLCJlbmNvZGVyIiwiSE9TVF9TRVJWSUNFUyIsIlVOU0lHTkFCTEVfSEVBREVSUyIsIkF3c0NsaWVudCIsImFjY2Vzc0tleUlkIiwic2VjcmV0QWNjZXNzS2V5Iiwic2Vzc2lvblRva2VuIiwic2VydmljZSIsInJlZ2lvbiIsImNhY2hlIiwicmV0cmllcyIsImluaXRSZXRyeU1zIiwiaW5wdXQiLCJpbml0IiwiaGVhZGVycyIsInNpZ25lciIsIkF3c1Y0U2lnbmVyIiwic2lnbmVkIiwiZmV0Y2hlZCIsInJlcyIsImRhdGV0aW1lIiwic2lnblF1ZXJ5IiwiYXBwZW5kU2Vzc2lvblRva2VuIiwiYWxsSGVhZGVycyIsInNpbmdsZUVuY29kZSIsImd1ZXNzZWRTZXJ2aWNlIiwiZ3Vlc3NlZFJlZ2lvbiIsImd1ZXNzU2VydmljZVJlZ2lvbiIsImhlYWRlciIsImVuY29kZVJmYzM5ODYiLCJzZWVuS2V5cyIsInBhaXIiLCJrMSIsInYxIiwiazIiLCJ2MiIsImRhdGUiLCJjYWNoZUtleSIsImtDcmVkZW50aWFscyIsImtEYXRlIiwiaG1hYyIsImtSZWdpb24iLCJrU2VydmljZSIsImJ1ZjJoZXgiLCJoYXNoSGVhZGVyIiwic3RyaW5nIiwiY3J5cHRvS2V5IiwiY29udGVudCIsIkhFWF9DSEFSUyIsImFycmF5QnVmZmVyIiwiYnVmZmVyIiwib3V0IiwiaWR4IiwidXJsRW5jb2RlZFN0ciIsIm1hdGNoIiwidGFyZ2V0UHJlZml4IiwiaXNTZXJ2ZXIiLCJISURERU4iLCJvblRhYkNoYW5nZSIsInByb3AiLCJnZXRIaWRkZW5Qcm9wIiwiYXR0YWNoRnVuYyIsInByZWZpeGVzIiwiT0JKX1RZUEUiLCJTVFJfVFlQRSIsIlVOS05PV04iLCJOQU1FIiwiVkVSU0lPTiIsIkVNUFRZIiwiRlVOQ19UWVBFIiwiVU5ERUZfVFlQRSIsIkJMQUNLQkVSUlkiLCJDSFJPTUUiLCJGSVJFRk9YIiwid2luZG93c1ZlcnNpb25NYXAiLCJzdHJNYXBwZXIiLCJyZ3hNYXBwZXIiLCJ1YSIsImFycmF5cyIsInByb3BzIiwic3RyIiwibWFwIiwiaGFzIiwic3RyMSIsInN0cjIiLCJsb3dlcml6ZSIsImdldE9TIiwiX3VhIiwiX29zIiwiQlJBVkUiLCJicm93c2VyQ2xpZW50SW5mbyIsIl93aW5kb3ckbmF2aWdhdG9yIiwicGxhdGZvcm0iLCJwcm9kdWN0IiwidmVuZG9yIiwiX2Jyb3dzZXJUeXBlIiwiYnJvd3NlclR5cGUiLCJ2ZXJzaW9uIiwidmVuZGVyIiwiZ2V0TGFuZ3VhZ2UiLCJicm93c2VyVGltZXpvbmUiLCJfd2luZG93JG5hdmlnYXRvcjIiLCJsYW5ndWFnZSIsImJyb3dzZXJMYW5ndWFnZSIsImxhbmd1YWdlcyIsInR6TWF0Y2giLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJvcGVyYU1hdGNoIiwiaWVNYXRjaCIsImhlYWRsZXNzIiwiY2hyb21lTWF0Y2giLCJpc0JyYXZlIiwic2FmYXJpTWF0Y2giLCJ3ZWJraXRNYXRjaCIsImFueU1hdGNoIiwiZmFsbGJhY2siLCJnZXRFdmVudE5hbWUiLCJldmVudE1hcCIsInByZXBhcmVBdHRyaWJ1dGVzIiwiX3ByZXBhcmVBdHRyaWJ1dGVzIiwiYXNBcnJheSIsInNhbml0aXplZCIsInByZXBWYWx1ZSIsIl9hcmdzIiwicHJlcGFyZURhdGEiLCJzYW5pdGl6ZUF0dHJpYnV0ZSIsImlzTnVsbE9yVW5kZWYiLCJwcmVwYXJlTWV0cmljcyIsIl9wcmVwYXJlTWV0cmljcyIsInNhbml0aXplTWV0cmljIiwiX3ByZXBhcmVEYXRhIiwic2FuaXRpemVDYWxsYmFjayIsIm5vdEVtcHR5IiwiU0VTU0lPTl9TVEFSVCQxIiwiU0VTU0lPTl9TVE9QJDIiLCJQQUdFX1ZJRVciLCJmb3JtYXRFdmVudCIsIl9mb3JtYXRFdmVudCIsImFwcFRpdGxlIiwiYXBwUGFja2FnZU5hbWUiLCJhcHBWZXJzaW9uQ29kZSIsImV2ZW50TWFwcGluZyIsImVucmljaEV2ZW50QXR0cmlidXRlcyIsImVucmljaEV2ZW50TWV0cmljcyIsImRlYnVnIiwic2Vzc2lvbkRhdGEiLCJzZXNzaW9uSWQiLCJzZXNzaW9uU3RhcnQiLCJzZXNzaW9uU3RhcnRVbml4IiwicGFnZVNlc3Npb25JbmZvIiwidGFiU2Vzc2lvbkRhdGEiLCJldmVudEF0dHJpYnMiLCJldmVudElkIiwidGltZSIsInNlc3Npb25EdXJhdGlvbiIsImRlZmF1bHRFdmVudEF0dHJpYnV0ZXMiLCJleHRyYUF0dHJpYnV0ZXMiLCJ1c2VyRGVmaW5lZE1ldHJpY3MiLCJkZWZhdWx0TWV0cmljcyIsImV4dHJhTWV0cmljcyIsImV2ZW50TWV0cmljcyIsInByZXBhcmVkRGF0YSIsImV2ZW50UGF5bG9hZCIsImdldFNlc3Npb24iLCJnZXRQYWdlU2Vzc2lvbiIsImdldFRhYlNlc3Npb24iLCJfb2JqZWN0U3ByZWFkIiwiRU5EUE9JTlRfS0VZJDEiLCJnZXRTdG9yYWdlS2V5IiwiRU5EUE9JTlRfS0VZIiwibWlncmF0aW9uUmFuIiwibWVyZ2VFbmRwb2ludERhdGEiLCJfbWVyZ2VFbmRwb2ludERhdGEiLCJlbmRwb2ludCIsImdldFVzZXJJZCIsImdldEVuZHBvaW50SWQiLCJlbmRwb2ludE1pZ3JhdGlvbiIsInNlc3Npb25LZXkiLCJwYWdlS2V5IiwicGFnZVNlc3Npb24iLCJjbGllbnRJbmZvIiwiZGVwcmVjYXRlZERhdGEiLCJwZXJzaXN0ZWRFbmRwb2ludCIsImFwcFZlcnNpb25TdHJpbmciLCJkZW1vZ3JhcGhpY0luZm8iLCJFbmRwb2ludERhdGEiLCJmb3VuZElkIiwiX2ZvdW5kSWQiLCJoYXNQcmV2aW91c1Nlc3Npb24iLCJncmFiQ29udGV4dCIsInBlcnNpc3RFbmRwb2ludCIsImdldEVuZHBvaW50JDEiLCJnZXRBcHBWZXJzaW9uQ29kZSIsImdldERlbW9ncmFwaGljSW5mbyIsIm92ZXJ3cml0ZU1lcmdlIiwiZW5kcG9pbnREYXRhIiwiZW5kcG9pbnRLZXkiLCJnZXRCcm93c2VyRGVtb2dyYXBoaWNJbmZvIiwiZ2V0U2VydmVyRGVtb2dyYXBoaWNJbmZvIiwiYXBwTmFtZSIsImFwcFZlcnNpb24iLCJfZGVzdGluYXRpb25BcnJheSIsInNvdXJjZUFycmF5IiwiZ2V0Q29udGV4dCIsImNyZWF0ZUV2ZW50UXVldWUiLCJfcXVldWVFdmVudCIsImV2ZW50RGF0YSIsImZsdXNoIiwicXVldWVFdmVudCIsIkFXUyIsIlJFVFJZQUJMRV9DT0RFUyIsIkFDQ0VQVEVEX0NPREVTIiwiQkFEX1JFUVVFU1RfQ09ERSIsImNhbGxBd3MiLCJfY2FsbEF3cyIsImV2ZW50c1JlcXVlc3QiLCJwaW5wb2ludFJlZ2lvbiIsInBpbnBvaW50QXBwSWQiLCJsYW1iZGFBcm4iLCJsYW1iZGFSZWdpb24iLCJjcmVkZW50aWFscyIsImF1dGgiLCJsYW1iZGFfcmVnaW9uIiwicGlucG9pbnRfcmVnaW9uIiwiZmlwcyIsIkxBTUJEQV9GTiIsIlBJTlBPSU5UX1VSTCIsImVuZHBvaW50VXJsIiwiYXdzIiwiY29tbWFuZCIsInJlc3BvbnNlcyIsImdldEF1dGgiLCJyZXNwIiwiRW5kcG9pbnRJdGVtUmVzcG9uc2UiLCJFdmVudHNJdGVtUmVzcG9uc2UiLCJoYW5kbGVFbmRwb2ludFVwZGF0ZUJhZFJlcXVlc3QiLCJfZ2V0QXV0aCIsImNyZWRzIiwiU3RhdHVzQ29kZSIsIk1lc3NhZ2UiLCJBTExPV0VEX0NIQU5ORUxTIiwiQ0hBTk5FTF9UWVBFUyIsIlNFU1NJT05fU1RBUlQiLCJTRVNTSU9OX1NUT1AkMSIsIkVNQUlMX1JFR0VYIiwiaXNFbWFpbCIsImNyZWF0ZVBpbnBvaW50U2VuZGVyIiwiX3BpbnBvaW50UHV0RXZlbnQiLCJldmVudHNBcnJheSIsImVuZHBvaW50SW5mbyIsImhhc0VuZHBvaW50IiwiY2hhbm5lbFR5cGUiLCJnZXRFbmRwb2ludCIsInNvcnRFdmVudHMiLCJmb3JtYXRQaW5wb2ludEJvZHkiLCJwaW5wb2ludFB1dEV2ZW50IiwiZXZlbnRBIiwiZXZlbnRCIiwiZW5kcG9pbnRJZCIsIlNFU1NJT05fU1RPUCIsIm5vT3AiLCJpbml0aWFsaXplIiwiY29uZmlndXJhdGlvbiIsInNtYXJ0UXVldWUiLCJyZXN0IiwiZGV0YWNoVW5sb2FkTGlzdGVuZXIiLCJvbldpbmRvd1VubG9hZCIsInVwZGF0ZUVuZHBvaW50Iiwic3RvcFNlc3Npb25IYW5kbGVyIiwic3RvcFNlc3Npb25GYWN0b3J5IiwibG9hZEVycm9yIiwiZm9ybWF0RXZlbnREYXRhIiwicGx1Z2luQXBpIiwiYXdzUGlucG9pbnRQbHVnaW4iLCJwbHVnaW5Db25maWciLCJyZWNvcmRFdmVudCIsImhhc1BhZ2VGaXJlZE9uY2UiLCJzdG9wU2Vzc2lvbiIsImN1cnJlbnRTZXNzaW9uRGF0YSIsInN0YXJ0TmV3U2Vzc2lvbiIsIm5ld1Nlc3Npb24iLCJzZXRTZXNzaW9uIiwiZGlzYWJsZUFub255bW91c1RyYWZmaWMiLCJ1c2VyRGV0YWlscyIsImFwcCIsImluaXRQYWdlU2Vzc2lvbiIsImluaXRUYWJTZXNzaW9uIiwiaW5pdFNlc3Npb25EYXRhIiwic2V0UGFnZVNlc3Npb24iLCJzZXRUYWJTZXNzaW9uIiwibmV3U2Vzc2lvbkZvck5ld1VzZXIiLCJ1dG1QYXJhbXMiLCJwaW5wb2ludENsaWVudCIsIlRISVJUWV9NSU5VVEVTIiwiU0VTU0lPTl9MRU5HVEgiLCJvblVzZXJBY3Rpdml0eSIsImFjdGl2ZVRpbWUiLCJpZGxlVGltZSIsInRpbWVBY3RpdmUiLCJleHRlbmRTZXNzaW9uIiwidXNlckluZm8iLCJyZXF1aXJlc0Zvcm1EYXRhIiwicHJvY2Vzc1BhcmFtcyIsIm5ld1BhcmFtcyIsInBhcmFtIiwiZmlyc3RFbGVtZW50VHlwZSIsImVuY29kZVBhcmFtIiwiYXJyYXlFbGVtIiwiZW5jb2RlUXVlcnlTdHJpbmciLCJGb3JtRGF0YSIsImVuY29kZUZvcm1EYXRhIiwiZm9yY2VGb3JtRGF0YSIsInVzZUZvcm1EYXRhIiwiZm9ybURhdGEiLCJmaWxlbmFtZSIsIkFyY0dJU1JlcXVlc3RFcnJvciIsIm1lc3NhZ2UiLCJjb2RlIiwiYWN0dWFsUHJvdG8iLCJERUZBVUxUX0FSQ0dJU19SRVFVRVNUX0NPTkZJRyIsIkdMT0JBTF9WQVJJQUJMRV9OQU1FIiwicmVxdWVzdENvbmZpZyIsInNlbmROb0NvcnNSZXF1ZXN0IiwidXJsT2JqIiwib3JpZ2luIiwicmVnaXN0ZXJOb0NvcnNEb21haW5zIiwiYXV0aG9yaXplZENyb3NzT3JpZ2luTm9Db3JzRG9tYWlucyIsImFkZE5vQ29yc0RvbWFpbiIsImlzTm9Db3JzRG9tYWluIiwiaXNOb0NvcnNSZXF1ZXN0UmVxdWlyZWQiLCJsYXN0UmVxdWVzdCIsIndhcm4iLCJnZXRGZXRjaCIsImlzU2FtZU9yaWdpbiIsIndpbiIsIk5PREVKU19ERUZBVUxUX1JFRkVSRVJfSEVBREVSIiwiZ2V0RGVmYXVsdFJlcXVlc3RPcHRpb25zIiwiQXJjR0lTQXV0aEVycm9yIiwicmV0cnlMaW1pdCIsInRyaWVzIiwicmV0cnlSZXF1ZXN0Iiwic2Vzc2lvbiIsIm5ld09wdGlvbnMiLCJpbnRlcm5hbFJlcXVlc3QiLCJjaGVja0ZvckVycm9ycyIsIm9yaWdpbmFsQXV0aEVycm9yIiwibWVzc2FnZUNvZGUiLCJlcnJvckNvZGUiLCJyZXF1ZXN0T3B0aW9ucyIsImRlZmF1bHRzIiwiaHR0cE1ldGhvZCIsInJhd1Jlc3BvbnNlIiwiYXV0aGVudGljYXRpb24iLCJyYXdUb2tlbiIsIm9yaWdpbmFsVXJsIiwic2FtZU9yaWdpbiIsInJlcXVpcmVzTm9Db3JzIiwiZmlyc3RQcm9taXNlIiwidG9rZW4iLCJyZXF1ZXN0SGVhZGVycyIsInVybFdpdGhRdWVyeVN0cmluZyIsImZldGNoIiwianNvbkVycm9yIiwic3RhdHVzVGV4dCIsImZvcm1hdHRlZE1lc3NhZ2UiLCJ0cnVuY2F0ZWRVcmwiLCJyZXF1ZXN0IiwiaW50ZXJuYWxPcHRpb25zIiwiY2xlYW5VcmwiLCJnZXRQb3J0YWxVcmwiLCJkZXRlcm1pbmVPd25lciIsImlzQkJveCIsImV4dGVudCIsImJib3hUb1N0cmluZyIsInVwZGF0ZUl0ZW0iLCJvd25lciIsImdldEl0ZW1CYXNlVXJsIiwicG9ydGFsVXJsT3JSZXF1ZXN0T3B0aW9ucyIsImJ1aWxkQWNjZXNzUHJvcGVydGllcyIsInVzZXJuYW1lIiwiY3VycmVudEFjY2Vzc1Byb3BlcnRpZXMiLCJhY2Nlc3NDaGFuZ2VzZXQiLCJhY2Nlc3NQcm9wZXJ0aWVzIiwiYWNjZXNzQ2hhbmdlIiwidGFyZ2V0UHJvcGVydHkiLCJzZXRQb3J0YWxJdGVtQWNjZXNzUGVybWlzc2lvbnMiLCJhZGRpdGlvbmFsVGVsZW1ldHJ5UHJvcGVydGllcyIsImdldFBvcnRhbEl0ZW1BY2Nlc3NQZXJtaXNzaW9ucyIsImFjY2VzcyIsIkFtYXpvbiIsInVzZXJQb29sSUQiLCJBbmFseXRpY3MiLCJwYWdlVXJsIiwicGFnZU5hbWUiLCJDb25zZW50TWFuYWdlciIsIkxpdEVsZW1lbnQiLCJ1c2VUOW4iLCJjcmVhdGVFdmVudCIsInN0eWxlcyIsImdvb2dsZUFuYWx5dGljc1RyYWNrZXIiLCJhbWF6b25UcmFja2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQU8sU0FBU0EsR0FBc0JDLElBQVUsSUFBSTtBQUNoRCxRQUFNLEVBQUUsVUFBQUMsR0FBVSxRQUFBQyxFQUFNLElBQUtGO0FBQzdCLFNBQUlDLEtBQTZEQyxHQUFPLGdCQUFpQixLQUM5RSxLQUVQLEdBQUNBLEtBQVVDLEdBQStCRCxDQUFNLEtBQUtFLEdBQWdDRixDQUFNLEtBQUtHLEdBQXFCSCxDQUFNO0FBSW5JO0FBQ0EsU0FBU0MsR0FBK0JELEdBQVE7QUFDNUMsU0FBT0EsRUFBTyxlQUFlQSxFQUFPLFFBQVFBLEVBQU8sS0FBSyxVQUFVQSxFQUFPO0FBQzdFO0FBQ0EsU0FBU0UsR0FBZ0NGLEdBQVE7QUFDN0MsU0FBT0EsRUFBTyxRQUFRLENBQUNBLEVBQU8sS0FBSyxTQUFTQSxFQUFPLGdCQUFnQjtBQUN2RTtBQUNBLFNBQVNHLEdBQXFCSCxHQUFRO0FBQ2xDLFNBQU8sQ0FBQ0EsRUFBTyxRQUFRQSxFQUFPLGdCQUFnQjtBQUNsRDtBQ2xCTyxNQUFNSSxLQUFVO0FBQUEsRUFDbkIsU0FBUyxDQUFBO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixJQUFJQyxHQUFLO0FBQ0wsUUFBSUM7QUFDSixRQUFJO0FBQ0EsTUFBQUEsSUFDSyxPQUFPLGdCQUFn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YTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1qQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFjQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVB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QUEsRUFDMUQ7QUFBQSxFQUdTLFNBQWlCO0FBQ3hCO0VBNEJGO0FBQUEsRUFPQSxTQUFjO0FBQ1osU0FBSyxlQUFlLEtBQUs7QUFBQSxNQUN2QixTQUFTLGFBQWEsUUFBUSxLQUFLLFdBQVcsTUFBTTtBQUFBLElBQUEsQ0FDckQ7QUFBQSxFQUNIO0FBQUEsRUFjQSxNQUFnQixRQUFzQjtBQUNwQyxRQUFJLENBQUMsS0FBSyxTQUFTO0FBQ2pCLFlBQU01cEMsSUFBNEI7QUFBQSxRQUNoQyxTQUFTLENBQUE7QUFBQSxRQUNULFFBQVEsS0FBSztBQUFBLE1BQUE7QUFFZixVQUFJLEtBQUssZ0JBQWdCLFNBQVMsR0FBRztBQUVuQyxjQUFNNnBDLElBQXlCLElBQUlsbEMsR0FBZ0I7QUFBQSxVQUNqRCxnQkFBZ0IsS0FBSztBQUFBLFFBQUEsQ0FDdEI7QUFDRCxRQUFBM0UsRUFBUSxRQUFTLEtBQUs2cEMsQ0FBc0I7QUFBQSxNQUM5QztBQUNBLFVBQUksS0FBSyxrQkFBa0I7QUFFekIsY0FBTUMsSUFBZ0IsSUFBSVgsR0FBTztBQUFBLFVBQy9CLFlBQVksS0FBSztBQUFBLFVBQ2pCLEtBQUs7QUFBQSxZQUNILE1BQU0sS0FBSztBQUFBLFlBQ1gsSUFBSSxLQUFLO0FBQUEsWUFDVCxTQUFTLEtBQUs7QUFBQSxVQUFBO0FBQUEsUUFDZixDQUNGO0FBQ0QsUUFBQW5wQyxFQUFRLFFBQVMsS0FBSzhwQyxDQUFvQjtBQUFBLE1BQzVDO0FBQ0EsV0FBSyxxQkFBcUIsSUFBSXhuQyxHQUFVdEMsQ0FBTyxHQUMvQyxNQUFNLEtBQUssbUJBQW1CLEtBQUEsR0FDOUIsS0FBSyxVQUFVO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBQUEsRUFHVSxlQUFvQjtBQUM1QixTQUFLLFFBQVEsSUFDVCxhQUFhLFFBQVEsS0FBSyxXQUFXLE1BQU0sVUFDN0MsYUFBYSxRQUFRLEtBQUssYUFBYSxPQUFPO0FBQUEsRUFFbEQ7QUFBQSxFQU9VLFVBQWU7QUFDdkIsaUJBQWEsUUFBUSxLQUFLLGFBQWEsTUFBTSxHQUM3QyxLQUFLLGVBQWUsS0FBSztBQUFBLE1BQ3ZCLFNBQVM7QUFBQSxJQUFBLENBQ1YsR0FDRCxLQUFLLFFBQVE7QUFBQSxFQUNmO0FBQ0Q7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwXX0=
|