{"version":3,"sources":["webpack:///./resources/js/Components/KMDViewer.js","webpack:///./resources/js/Components/KeepRuleViewer.js","webpack:///./resources/js/Components/EntityDetails.js","webpack:///./resources/js/Components/Tooltip.js","webpack:///./resources/js/Components/EntityViewer.js","webpack:///./resources/js/Components/UnsavedChangesDialog.js","webpack:///./resources/js/ProguardMode.js","webpack:///./resources/js/Components/Playground.js","webpack:///./resources/js/Components/EmbeddedPlayground.js","webpack:///./resources/js/Components/PlaygroundName.js","webpack:///./resources/js/Components/EmbedButton.js","webpack:///./resources/js/Pages/ViewPlayground.js"],"names":["KMDViewer","entity","id","usePage","useState","kmd","setKMD","fontSize","URLSearchParams","window","location","search","get","useEffect","hasKMD","fetch","config","prefix","path","then","result","json","r","prism","className","language","style","KeepRuleViewer","rule","setRule","useEditorContentContext","setEditorContent","setScrollToEnd","onClick","editorContent","includes","CrossIcon","props","fill","stroke","viewBox","xmlns","strokeLinecap","strokeLinejoin","strokeWidth","d","CheckIcon","ClassDetails","accessFlags","accessModifiers","AccessFlags","PUBLIC","FINAL","STATIC","ABSTRACT","INTERFACE","text","superClass","interfaces","length","map","interf","idx","key","MethodDetails","PRIVATE","PROTECTED","SYNCHRONIZED","NATIVE","SYNTHETIC","returnType","simpleName","params","p","FieldDetails","VOLATILE","TRANSIENT","type","EntityDetails","useSelectedEntityContext","selectedEntity","setSelectedEntity","keptEntities","details","icon","enabled","keptEntity","processingFlags","$","positionClasses","right","bottom","Tooltip","children","position","content","disabled","wrapperClassName","show","setShow","pos","classNames","onMouseEnter","onMouseLeave","jstree","plugins","node_customize","defaults","switch","default","options","parent","this","redraw_node","obj","el","apply","arguments","node","get_node","cfg","settings","original","customizer","NewFileIcon","CollapseAllIcon","TrimIcon","EntityViewer","loading","onReady","onTrimEnter","onTrimExit","runResult","fetchEntities","onChangeAPKEnter","mode","setMode","setKeptEntities","treeContainer","useRef","error","hasKeptEntities","previousRunResult","setPreviousRunResult","previousRunResultRef","current","treeData","core","data","passDataToTreeCallback","get_path","child","dblclick_toggle","themes","dots","types","kept","a_attr","has_kept","checkbox","visible","whole_node","tie_selection","find","css","parseInt","entityIcon","addClass","insertAfter","entityAnchor","appendTo","destroy","on","e","target","classList","contains","toggle_node","tree","get_json","flat","set_type","redraw","exitTrimMode","hide_checkboxes","AppSweep","show_checkboxes","close_all","ref","trimmed","get_checked","Inertia","post","onSuccess","UnsavedChangesDialog","hasUnsavedChanges","onApply","onDiscard","isOpen","setIsOpen","nosave","setTimeout","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","ProguardHighlightRules","ace","acequire","TextHighlightRules","$rules","start","token","regex","next","filenamefilter","modifiers","classfilter","normalizeRules","ProguardMode","Mode","HighlightRules","lineCommentStart","Playground","onChange","rules","sessionRules","apk","scrollToEnd","hasChanges","setHasChanges","handleOnBeforeUnload","preventDefault","returnValue","previousRules","setChangeAPK","setEditorEnabled","setRunResult","addEventListener","removeEventListener","activeRequests","setActiveRequests","runRequestAbortContoller","runPlayground","useCallback","debounce","status","trimmedRules","split","line","trim","filter","join","trimRules","controller","AbortController","method","body","toFormData","signal","res","useInterval","replace","only","cb","entities","editorEnabled","changeAPKEnabled","editorRef","cancelUpload","editor","getSession","resize","getValue","gotoLine","navigateLineEnd","focus","defaultSize","minSize","primary","size","onDragFinished","theme","editorProps","$blockScrolling","showPrintMargin","height","width","value","newRules","onLoad","keyboardHandler","readOnly","parseError","parseWarning","ProGuardLogo","Uploadzone","postURL","onStartCallback","cancel","Range","require","EmbeddedPlayground","from","to","name","marker","setMarker","session","removeMarker","fromIdx","toIdx","markerId","addMarker","scrollToLine","href","src","alt","rel","setHighlightGutterLine","renderer","$cursorLayer","element","display","container","lineHeight","updateFontSize","highlightActiveLine","highlightSelectedWord","PlaygroundName","onChanged","role","onBlur","newName","innerHTML","JSON","stringify","onKeyDown","keyCode","contentEditable","spellCheck","EmbedButton","embedCode","highlightLines","fromParam","toParam","setHighlightLines","setFrom","setTo","copyText","setCopyText","aria-hidden","aria-modal","aria-labelledby","copyToClipboard","htmlFor","checked","min","v","ViewPlayground","flash","isCreator","has","showFlashMessages","headerButtons","document","toastMsg","sidebarButtons","Layout","title"],"mappings":"8qCAOA,IA2CeA,EA3CG,SAAC,GAAe,IAAbC,EAAa,EAAbA,OACXC,EAAOC,oBAAPD,GADwB,IAEVE,mBAAS,MAFC,GAEzBC,EAFyB,KAEpBC,EAFoB,KAI1BC,EADS,IAAIC,gBAAgBC,OAAOC,SAASC,QAC3BC,IAAI,YAY5B,OAVAC,qBAAU,WACJZ,GAAUA,EAAOa,OACnBC,MAAM,GAAD,OAAIC,IAAOC,OAAX,cAAuBf,EAAvB,qBAAsCD,EAAOiB,OAC/CC,MAAK,SAACC,GAAD,OAAYA,EAAOC,UACxBF,MAAK,SAACG,GAAD,OAAOhB,EAAOgB,EAAEjB,QAExBC,EAAO,QAER,CAACL,IAECA,GAAWA,EAAOa,QAInBP,IACFgB,IAAM,2BAA2BhB,SAAjC,UAA0D,GAAXA,EAA/C,OAIA,yBAAKiB,UAAU,2BACZjB,GAAY,0DAAuC,GAAXA,EAA5B,QACb,wBAAIiB,UAAU,yBAAd,mBACCnB,EACC,yBAAKmB,UAAU,+BACb,kBAAC,IAAD,CAAmBC,SAAS,SAASC,MAAOH,IAAOC,UAAU,OAC1DnB,IAIL,yBAAKmB,UAAU,+CACb,kBAAC,IAAD,CAAaA,UAAU,8CAnBtB,M,0iCCnBX,IAmCeG,EAnCQ,SAAC,GAAe,IAAb1B,EAAa,EAAbA,OAChBC,EAAOC,oBAAPD,GAD6B,IAEbE,mBAAS,MAFI,GAE9BwB,EAF8B,KAExBC,EAFwB,OAGQC,YAAwB,MAA7DC,EAH6B,EAG7BA,iBAAkBC,EAHW,EAGXA,eAY1B,OAVAnB,qBAAU,WACJZ,EACFc,MAAM,GAAD,OAAIC,IAAOC,OAAX,cAAuBf,EAAvB,sBAAuCD,EAAOiB,OAChDC,MAAK,SAACC,GAAD,OAAYA,EAAOC,UACxBF,MAAK,SAACG,GAAD,OAAOO,EAAQP,EAAEM,SAEzBC,EAAQ,QAET,CAAC5B,IAECA,EAIE,6BACL,yBAAKuB,UAAU,oFACb,0BAAMA,UAAU,0BAA0BI,IAE5C,4BAAQJ,UAAU,uFAChBS,QAAS,WACPF,GAAiB,SAAAG,GACf,OAAKA,EAAcC,SAASP,GAGrBM,EAFEA,EAAgB,OAASN,KAIpCI,GAAe,KARnB,aAPO,M,+MCfX,IAAMI,EAAY,SAACC,GAAD,OAChB,6BACMA,EADN,CAEEC,KAAK,OACLC,OAAO,eACPC,QAAQ,YACRC,MAAM,+BAEN,0BACEC,cAAc,QACdC,eAAe,QACfC,YAAY,IACZC,EAAE,2BAKFC,EAAY,SAACT,GAAD,OAChB,6BACMA,EADN,CAEEI,MAAM,6BACNH,KAAK,OACLE,QAAQ,YACRD,OAAO,iBAEP,0BACEG,cAAc,QACdC,eAAe,QACfC,YAAY,IACZC,EAAE,qBA8BR,IAAME,EAAe,SAAC,GAAD,IAzBQC,EACvBC,EAwBkBhD,EAAH,EAAGA,OAAH,OACnB,6BACE,wBAAIuB,UAAU,qCA3BWwB,EA4BF/C,EAAO+C,YA3B5BC,EAAkB,GAClBD,EAAcE,IAAYC,SAC5BF,GAAmB,WAEjBD,EAAcE,IAAYE,QAC5BH,GAAmB,UAEjBD,EAAcE,IAAYG,SAC5BJ,GAAmB,WAGnBD,EAAcE,IAAYI,UACe,IAAxCN,EAAcE,IAAYK,aAE3BN,GAAmB,aAEjBD,EAAcE,IAAYK,UAC5BN,GAAmB,aAEnBA,GAAmB,SAEdA,GAOH,8BAAOhD,EAAOuD,OAGhB,yBAAKhC,UAAU,kEACb,yBAAKA,UAAU,aAAf,WACA,yBAAKA,UAAU,qCACb,8BAAOvB,EAAOwD,YAAc,MAE9B,yBAAKjC,UAAU,aAAf,cACA,yBAAKA,UAAU,qCACZvB,EAAOyD,WAAWC,OAAS,EACxB1D,EAAOyD,WAAWE,KAAI,SAACC,EAAQC,GAAT,OACtB,yBAAKC,IAAKD,GACR,8BAAOD,GACNC,EAAM7D,EAAOyD,WAAWC,OAAS,GAAK,QAGzC,QAuCZ,IAAMK,EAAgB,SAAC,GAAD,IAjCQhB,EACxBC,EAgCmBhD,EAAH,EAAGA,OAAH,OACpB,6BACE,wBAAIuB,UAAU,0BACZ,6BACE,0BAAMA,UAAU,UArCMwB,EAsCE/C,EAAO+C,YArCjCC,EAAkB,GAClBD,EAAcE,IAAYC,SAC5BF,GAAmB,WAEjBD,EAAcE,IAAYe,UAC5BhB,GAAmB,YAEjBD,EAAcE,IAAYgB,YAC5BjB,GAAmB,cAEjBD,EAAcE,IAAYE,QAC5BH,GAAmB,UAEjBD,EAAcE,IAAYG,SAC5BJ,GAAmB,WAEjBD,EAAcE,IAAYiB,eAC5BlB,GAAmB,iBAEjBD,EAAcE,IAAYkB,SAC5BnB,GAAmB,WAEjBD,EAAcE,IAAYI,WAC5BL,GAAmB,aAEjBD,EAAcE,IAAYmB,YAC5BpB,GAAmB,cAGdA,GASEhD,EAAOqE,WAFV,IAEuBrE,EAAOsE,WAF9B,IAG2B,GAAxBtE,EAAOuE,OAAOb,QAAe,KAE/B1D,EAAOuE,OAAOZ,KAAI,SAACa,EAAGX,GACrB,OACE,0BAAMtC,UAAU,aAAauC,IAAKD,GAC/BW,EADH,QAKHxE,EAAOuE,OAAOb,OAAS,GAAK,0BAAMnC,UAAU,SAAhB,SAmCrC,IAAMkD,EAAe,SAAC,GAAD,IA7BQ1B,EACvBC,EA4BkBhD,EAAH,EAAGA,OAAH,OACnB,6BACE,wBAAIuB,UAAU,0BACZ,+BAhCuBwB,EAiCA/C,EAAO+C,YAhC9BC,EAAkB,GAClBD,EAAcE,IAAYC,SAC5BF,GAAmB,WAEjBD,EAAcE,IAAYe,UAC5BhB,GAAmB,YAEjBD,EAAcE,IAAYgB,YAC5BjB,GAAmB,cAEjBD,EAAcE,IAAYE,QAC5BH,GAAmB,UAEjBD,EAAcE,IAAYG,SAC5BJ,GAAmB,WAEjBD,EAAcE,IAAYyB,WAC5B1B,GAAmB,aAEjBD,EAAcE,IAAY0B,YAC5B3B,GAAmB,cAEjBD,EAAcE,IAAYmB,YAC5BpB,GAAmB,cAEdA,GAQAhD,EAAO4E,KAFV,IAEiB5E,EAAOsE,eA4GfO,EAjGO,WAAM,MAKtBC,cAHc9E,EAFQ,EAExB+E,eACAC,EAHwB,EAGxBA,kBACAC,EAJwB,EAIxBA,aAGF,GAAc,MAAVjF,EACF,OAAO,KAGT,IAGIkF,EAFE5E,EADS,IAAIC,gBAAgBC,OAAOC,SAASC,QAC3BC,IAAI,YAG5B,OAAQX,EAAOmF,MACb,IAAK,QACHD,EAAU,kBAAC,EAAD,CAAclF,OAAQA,IAChC,MACF,IAAK,SACHkF,EAAU,kBAAC,EAAD,CAAelF,OAAQA,IACjC,MACF,IAAK,QACHkF,EAAU,kBAAC,EAAD,CAAclF,OAAQA,IAIpC,IAAMmF,EAAO,SAACC,GAAD,OACXA,EACE,kBAAC,EAAD,CAAW7D,UAAU,8BAEnB,kBAAC,EAAD,CAAWA,UAAU,+BAGrB8D,EAAaJ,EAAeA,EAAajF,EAAOC,IAAM,KAE5D,OACE,yBAAKsB,UAAU,kCACZjB,GACC,iEAA8C,GAAXA,EAAnC,kCACuC,GAAXA,EAD5B,UAGF,yBAAKiB,UAAU,oEACb,yBAAKA,UAAU,aACZ2D,EACD,6BACGG,EACC,oCACE,wBAAI9D,UAAU,8BAAd,0BACA,2BAAOA,UAAU,gDACf,2BAAOA,UAAU,iBACf,4BACE,iDACA,4BACG4D,EAAsD,IAzDxD,QAyDQE,EAAWC,oBAGtB,4BACE,+CACA,4BACGH,EAAmD,IAjExD,QAiEWE,EAAWC,oBAGtB,4BACE,kDACA,4BACGH,EAAqD,IAtExD,QAsESE,EAAWC,uBAO1B,0BAAM/D,UAAU,sGACd,kBAAC,EAAD,CAAWA,UAAU,iBADvB,2BAKJ8D,GAAc,6BACd,wBAAI9D,UAAU,8BAAd,uBACA,kBAAC,EAAD,CAAgBvB,OAAQA,MAI5B,4BACEuB,UAAU,oCACVS,QAAS,WACPgD,EAAkB,QAGpB,kBAAC,EAAD,CAAWzD,UAAU,gB,w+BCvR/B,ICcYgE,EDdNC,EAAkB,CACtBC,MAAO,uBACPC,OAAQ,yBAiCKC,EA9BC,SAAC,GAMX,IALJC,EAKI,EALJA,SACAC,EAII,EAJJA,SACAC,EAGI,EAHJA,QACAC,EAEI,EAFJA,SACAC,EACI,EADJA,iBACI,IACoB7F,oBAAS,GAD7B,GACG8F,EADH,KACSC,EADT,KAEEC,EAAMN,GAAY,QACxB,OACE,yBACEtE,UAAW6E,IAAW,wBAAyBJ,GAC/CK,aAAc,kBAAMH,GAAQ,IAC5BI,aAAc,kBAAMJ,GAAQ,KAE3BN,EACAK,IAASF,EACR,yBACExE,UAAW6E,IACT,0BACAZ,EAAgBW,KAGjBL,GAED,O,ovEChBEP,EAmCTA,KAhCKgB,OAAOC,QAAQC,iBAYrBlB,EAAEgB,OAAOG,SAASD,eAAiB,CACjC3C,IAAK,OACL6C,OAAQ,GACRC,QAAS,MAGXrB,EAAEgB,OAAOC,QAAQC,eAAiB,SAAUI,EAASC,GACnDC,KAAKC,YAAc,SAAUC,GAC3B,IAAIC,EAAKJ,EAAOE,YAAYG,MAAMJ,KAAMK,WACxC,GAAIF,EAAI,CACN,IAAIG,EAAON,KAAKO,SAASL,GACrBM,EAAMR,KAAKS,SAASf,eACpB3C,EAAMyD,EAAIzD,IACVc,EAAOyC,GAAQA,EAAKI,UAAYJ,EAAKI,SAAS3D,GAC9C4D,EAAc9C,GAAQ2C,EAAG,OAAQ3C,IAAU2C,EAAG,QAC9CG,GAAYA,EAAWR,EAAIG,GAEjC,OAAOH,KAKb,IAAMS,EAAc,kBAClB,yBACEpG,UAAU,UACVc,KAAK,OACLE,QAAQ,YACRC,MAAM,6BACNF,OAAO,gBAEP,0BACEG,cAAc,QACdC,eAAe,QACfC,YAAY,IACZC,EAAE,2HAKFgF,EAAkB,kBACtB,yBACErG,UAAU,UACVgB,QAAQ,YACRF,KAAK,OACLG,MAAM,8BAEN,0BACEI,EAAE,ihBACFP,KAAK,mBAKLwF,EAAW,kBACf,yBACEtG,UAAU,UACVc,KAAK,OACLC,OAAO,eACPC,QAAQ,YACRC,MAAM,8BAEN,0BACEC,cAAc,QACdC,eAAe,QACfC,YAAY,IACZC,EAAE,4KA6ROkF,GArRM,SAAC,GAQhB,IAPJC,EAOI,EAPJA,QACAC,EAMI,EANJA,QACAC,EAKI,EALJA,YACAC,EAII,EAJJA,WACAC,EAGI,EAHJA,UACAC,EAEI,EAFJA,cACAC,EACI,EADJA,iBAEM9D,EAAS,IAAIhE,gBAAgBC,OAAOC,SAASC,QAD/C,IAEoBP,mBAbN,UAWd,GAEGmI,EAFH,KAESC,EAFT,OAOAzD,cAFFE,GALE,EAIFD,eAJE,EAKFC,mBACAwD,EANE,EAMFA,gBAEIC,EAAgBC,iBAAO,MACrBzI,EAAOC,oBAAPD,GATJ,IAU8CE,mBAAS,CACzDwI,MAAO,KACPC,gBAAiB,GACjB3D,aAAc,KAbZ,GAUG4D,EAVH,KAUsBC,EAVtB,KAeEC,EAAuBL,iBAAOG,GAEpCjI,qBAAU,WACRmI,EAAqBC,QAAUH,IAC9B,CAACA,IAEJ,IAAMI,EAAW,CACfC,KAAM,CAEJC,KAAM,SAAC9B,EAAM+B,GACX,IACMnI,EADOsE,IAAEkD,EAAcO,SAASzC,QAAO,GAC3B8C,SAAShC,EAAM,KAAK,IAAS,GAY/Ce,EAAcnH,GAXiB,SAAC2E,GAAa,UACvBA,GADuB,IAC3C,2BAA8B,SAAnB0D,EAAmB,SACxBP,SAAJ,UAAIA,EAAsBC,QAAQJ,uBAAlC,aAAI,EAAgDU,EAAMrJ,OACxDqJ,EAAM1E,KAAO,aAEXmE,SAAJ,UAAIA,EAAsBC,QAAQ/D,oBAAlC,aAAI,EAA6CqE,EAAMrJ,OACrDqJ,EAAM1E,KAAO,SAN0B,8BAS3CwE,EAAuBxD,OAI3B2D,iBAAiB,EACjBC,OAAQ,CACNC,MAAM,IAGVC,MAAO,CACLC,KAAM,CACJC,OAAQ,CAAE,aAAa,IAEzBC,SAAU,CACRD,OAAQ,CAAE,iBAAiB,KAG/BE,SAAU,CACRC,SAAS,EACTC,YAAY,EACZC,eAAe,GAEjBxD,eAAgB,CACdG,QAAS,SAAUM,EAAIG,GACjB9C,EAAO5D,IAAI,aACQ4E,IAAE2B,GAAIgD,KAAK,kBACnBC,IAAI,WAA+C,GAAnCC,SAAS7F,EAAO5D,IAAI,cAEnD,GAAkB,YAAd0G,EAAKlC,KAAoB,CAC3B,IAAMkF,EAAa9E,IAAE2B,GAAIgD,KAAK,qBACxB/E,EAAOI,IAAE,WAAW+E,SAAS,eASnC,GARIjD,EAAKI,SAAS1E,YAAcE,IAAYC,OAC1CiC,EAAKmF,SAAS,UAAUC,YAAYF,GAC3BhD,EAAKI,SAAS1E,YAAcE,IAAYgB,UACjDkB,EAAKmF,SAAS,aAAaC,YAAYF,GAC9BhD,EAAKI,SAAS1E,YAAcE,IAAYe,SACjDmB,EAAKmF,SAAS,WAAWC,YAAYF,GAGnChD,EAAKI,SAAS5G,OAAQ,CACxB,IAAM2J,EAAejF,IAAE2B,GAAIgD,KAAK,kBACnB3E,IAAE,WAAW+E,SAAS,eAC9BA,SAAS,OAAOG,SAASD,OAKtChE,QAAS,CAAC,QAAS,WAAY,mBAKjC5F,qBAAU,WACJwH,IACE7C,IAAEkD,EAAcO,SAASzC,QAAO,IAClChB,IAAEkD,EAAcO,SAASzC,QAAO,GAAMmE,UAGxCnF,IAAEkD,EAAcO,SAASzC,OAAO0C,GAChC1D,IAAEkD,EAAcO,SAAS2B,GAAG,eAAgB3C,GAC5CzC,IAAEkD,EAAcO,SAAS2B,GAAG,WAAY,kBAAkB,SAAUC,GAC7DA,EAAEC,OAAOC,UAAUC,SAAS,oBAC/BxF,IAAEwB,MAAMR,QAAO,GAAMyE,YAAYJ,EAAEC,WAGvCtF,IAAEkD,EAAcO,SAAS2B,GAAG,QAAS,kBAAkB,SAAUC,GAC/D,IAAKA,EAAEC,OAAOC,UAAUC,SAAS,mBAAoB,CACnD,IAAM/K,EAASuF,IAAEwB,MAAMR,QAAO,GAAMe,SAASsD,EAAEC,QAAQpD,SACvD,GAAoB,YAAhBzH,EAAOmF,KAAoB,CAC7B,IAAM8F,EAAO1F,IAAEkD,EAAcO,SAASzC,QAAO,GAC7CvB,EAAkB,EAAD,KACZhF,GADY,IAEfiB,KAAMgK,EAAK5B,SAASuB,EAAEC,OAAQ,KAAK,cAM5C,CAACzC,IAEJxH,qBAAU,WACR,GAAyB,QAArBuH,aAAA,EAAAA,EAAWQ,OAAgB,CAC7B,IAAMsC,EAAO1F,IAAEkD,EAAcO,SAASzC,QAAO,GAC7C,IAAK0E,EACH,OAEF,IAL6B,MAKfA,EAAKC,SAAS,KAAM,CAChCC,MAAM,KANqB,IAQ7B,2BAA0B,KAAf9D,EAAe,QACxB4D,EAAKG,SAAS/D,EAAKpH,GAAI,WACnBkI,EAAUS,gBAAgBvB,EAAKpH,KACjCgL,EAAKG,SAAS/D,EAAKpH,GAAI,YAErBkI,EAAUlD,aAAaoC,EAAKpH,KAC9BgL,EAAKG,SAAS/D,EAAKpH,GAAI,SAdE,8BAiB7BgL,EAAKI,SACLvC,EAAqBX,GACrBK,EAAgBL,EAAUlD,iBAE3B,CAACkD,IAEJ,IAWMmD,EAAe,WACnB/F,IAAEkD,EAAcO,SAASzC,QAAO,GAAMgF,kBACtChD,EApKgB,UAqKhBL,KAsBF,OACE,yBAAK3G,UAAU,iCACb,kBAACiK,EAAA,EAAD,MACA,yBAAKjK,UAAU,6EACb,yBAAKA,UAAU,+BACb,0BAAMA,UAAU,iBAAhB,wBACCwG,GACC,kBAAC,IAAD,CAAaxG,UAAU,4CAG3B,yBAAKA,UAAU,kBACb,kBAAC,EAAD,CACEuE,QACE,uBAAGvE,UAAU,mFAAb,oBAIFsE,SAAS,UAET,4BACEtE,UAAU,2BACVS,QAAS,WACPgD,EAAkB,MAClBqD,MAGF,kBAAC,EAAD,QAGJ,kBAAC,EAAD,CACEvC,QACE,uBAAGvE,UAAU,mFAAb,iBAIFsE,SAAS,UAET,4BACEtE,UAAU,oCACVS,QAvEU,WACpBuD,IAAEkD,EAAcO,SAASzC,QAAO,GAAMkF,kBACtClD,EA5Jc,QA6JdvD,EAAkB,MAClBiD,MAqEU,kBAAC,EAAD,QAGJ,kBAAC,EAAD,CACEnC,QACE,uBAAGvE,UAAU,mFAAb,gBAIFsE,SAAS,UAET,4BACEtE,UAAU,oCACVS,QA1FQ,WAClBuD,IAAEkD,EAAcO,SAASzC,QAAO,GAAMmF,cA2F5B,kBAAC,EAAD,UAKR,yBAAKnK,UAAU,0BACb,yBAAKoK,IAAKlD,KAxPA,SA0PXH,GACC,yBAAK/G,UAAU,2BACb,wBAAIA,UAAU,qBAAd,iBACA,uBAAGA,UAAU,oCAAb,2JAKA,yBAAKA,UAAU,+BACb,4BACEA,UAAU,iCACVS,QA9FQ,WAClB,IAAM4J,EAAUrG,IAAEkD,EAAcO,SAASzC,QAAO,GAAMsF,cAChC,GAAlBD,EAAQlI,OACV4H,IAEAQ,UAAQC,KACNhL,IAAOC,OAAS,MAAQf,EAAK,QAC7B,CACE2L,QAASA,GAEX,CACEI,UAAW,WACTV,SAgFA,eAMA,4BACE/J,UAAU,iCACVS,QAASsJ,GAFX,YASN,kBAAC,EAAD,Q,w9BCtXN,IAqDeW,GArDc,SAAC,GAA8C,IAA5CC,EAA4C,EAA5CA,kBAAmBC,EAAyB,EAAzBA,QAASC,EAAgB,EAAhBA,UAAgB,KAC9CjM,oBAAS,GADqC,GACnEkM,EADmE,KAC3DC,EAD2D,KAGpEC,EAAkC,SADzB,IAAIhM,gBAAgBC,OAAOC,SAASC,QAC7BC,IAAI,UAQ1B,OANAC,qBAAU,WACJsL,GACFM,YAAW,kBAAMF,GAAU,KAAO,OAEnC,CAACJ,IAEAK,EACK,KAIP,yBAAKhL,UAAU,mDACb,kBAAC,KAAD,CACEA,UAAU,sGACV0E,KAAMoG,EACNI,MAAM,0BACNC,UAAU,qCACVC,QAAQ,sCACRC,MAAM,0BACNC,UAAU,sCACVC,QAAQ,qCARV,gEAWE,yBAAKvL,UAAU,+BACb,4BACEA,UAAU,mCACVS,QAAS,WACPmK,IACAG,GAAU,KAJd,iBASA,4BACE/K,UAAU,mCACVS,QAAS,WACPoK,IACAE,GAAU,KAJd,e,y6CCvCH,IAAMS,GAAb,iBAA4CvM,OAAOwM,IAAIC,SACrD,iCACAC,oBAFF,YAGE,aAAc,wBACZ,gBA2KKC,OAAS,CACZC,MAAO,CACL,CACEC,MAAO,UACPC,MAAO,QAET,CACED,MAAO,oBACPC,MAhLJ,21BAiLIC,KAAM,kBAER,CACEF,MAAO,oBACPC,MAtIJ,2vDAwIE,CACED,MAAO,oBACPC,MAzCJ,oTA0CIC,KAAM,aAER,CACEF,MAAO,UACPC,MACE,4IAEJ,CACED,MAAO,CAAC,WAAY,UACpBC,MAAO,gBAET,CACED,MAAO,UACPC,MAAO,wBACPC,KAAM,eAER,CACEF,MAAO,mBACPC,MAAO,mBAET,CACED,MAAO,mBACPC,MAAO,oBAET,CACED,MAAO,mBACPC,MAAO,cAET,CACED,MAAO,mBACPC,MACE,2FAEJ,CACED,MAAO,CAAC,SAAU,mBAAoB,OAAQ,QAC9CC,MACE,gHAEJ,CACED,MAAO,CAAC,SAAU,WAAY,WAAY,UAC1CC,MACE,sGAEJ,CACED,MAAO,OACPC,MAAO,eAGXE,eAAgB,CACd,CACEH,MAAO,qBACPC,MAAO,KACPC,KAAM,UAGVE,UAAW,CACT,CACEJ,MAAO,OACPC,MAAO,OACPC,KAAM,SAER,CACEF,MAAO,OACPC,MAAO,KAET,CACED,MAAO,qBACPC,MA5FJ,qGA+FAI,YAAa,CACX,CACEL,MAAO,mBACPC,MACE,0FACFC,KAAM,WAKZ,EAAKI,iBA9QO,EAHhB,YAqRqBC,G,iBAAqBpN,OAAOwM,IAAIC,SAAS,iBAC3DY,M,YACD,aAAc,yBACZ,gBACKC,eAAiBf,GACtB,EAAKgB,iBAAmB,IAHZ,E,u9BClQhB,IAiUeC,GArTI,SAAC,GAAiB,MAAfC,EAAe,EAAfA,SAAe,EACyB/N,oBAApDD,EAD2B,EAC3BA,GAAIiO,EADuB,EACvBA,MAAOC,EADgB,EAChBA,aAAcjC,EADE,EACFA,kBAAmBkC,EADjB,EACiBA,IADjB,EAEWtJ,cAAtCC,EAF2B,EAE3BA,eAAgBC,EAFW,EAEXA,kBAFW,EAGsCnD,cAAjEI,EAH2B,EAG3BA,cAAeH,EAHY,EAGZA,iBAAkBuM,EAHN,EAGMA,YAAatM,EAHnB,EAGmBA,eAChDwC,EAAS,IAAIhE,gBAAgBC,OAAOC,SAASC,QAC7C6L,EAAkC,SAAzBhI,EAAO5D,IAAI,UALS,KAWCR,oBAAS,GAXV,GAW5BmO,EAX4B,KAWhBC,EAXgB,KAY7BC,EAAuB,SAAC5D,GAG5B,OAFAA,EAAE6D,iBACF7D,EAAE8D,YAAc,gBACT9D,EAAE8D,aAGLC,EAAgBjG,iBAAO,IAE7B9H,qBAAU,WACR+N,EAAc3F,QAAU,GACxBuF,GAAc,GACdK,GAAa,GACbC,GAAiB,GACjBC,EAAa,MACb9J,EAAkB,MAClBlD,EAAiBoM,KAChB,CAACjO,IAEJW,qBAAU,WACR,GAAK0N,EAIL,OAAK/B,OAAL,GACE/L,OAAOuO,iBAAiB,eAAgBP,GACjC,WACLhO,OAAOwO,oBAAoB,eAAgBR,OAG9C,CAACA,EAAsBF,IAzCS,SA6CSnO,mBAAS,GA7ClB,GA6C5B8O,EA7C4B,KA6CZC,EA7CY,KA8C7BC,EAA2BzG,iBAAO,MA9CL,KA+CDvI,mBAAS,MA/CR,GA+C5BgI,EA/C4B,KA+CjB2G,EA/CiB,KAgD7BM,EAAgBC,sBACpBC,KAAS,SAACpB,GACR,GAAW,MAAPE,GAA6B,aAAdA,EAAImB,OAAvB,CAKA,IAAMC,EA/DM,SAACtB,GACjB,OAAOA,EACJuB,MAAM,SACN9L,KAAI,SAAC+L,GAAD,OAAUA,EAAKC,UACnBC,QAAO,SAACF,GAAD,OAAUA,EAAKhM,OAAS,KAC/BmM,KAAK,IA0DiBC,CAAU5B,GAC/B,GAAIS,EAAc3F,SAAWwG,EAA7B,CAGAb,EAAc3F,QAAUwG,EAExB,IAAMO,EAAa,IAAIC,gBACvBb,EAAyBnG,QAAU+G,EACnCb,GAAkB,SAACD,GAAD,OAAoBA,EAAiB,KACvDnO,MAAM,GAAD,OAAIC,IAAOC,OAAX,cAAuBf,GAAM,CAChCgQ,OAAQ,MACRC,KAAMC,YAAW,CACfjC,MAAOA,IAETkC,OAAQL,EAAWK,SAElBlP,MAAK,SAACmP,GAAD,OAASA,EAAIjP,UAClBF,MACC,SAACC,GACC+N,GAAkB,SAACD,GAAD,OAAoBA,EAAiB,KACvDH,EAAa3N,MAGf,WACE+N,GAAkB,SAACD,GAAD,OAAoBA,EAAiB,YA1FpC,KA8F3B,CAAChP,EAAImO,IAKPkC,aACE,WACExE,UAAQyE,QAAR,UAAmBxP,IAAOC,OAA1B,cAAsCf,GAAM,CAC1CgQ,OAAQ,MACRO,KAAM,CAAC,WAGJ,MAAPpC,GAA6B,eAAdA,EAAImB,OA3GS,IA2G2C,MAGzE,IAAMnH,EAAgBiH,uBACpB,SAACpO,EAAMwP,GACM,MAAPrC,IACFc,GAAkB,SAACD,GAAD,OAAoBA,EAAiB,KACvDnO,MAAM,GAAD,OAAIC,IAAOC,OAAX,cAAuBf,EAAvB,0BAA2CgB,IAC7CC,MAAK,SAACmP,GAAD,OAASA,EAAIjP,UAClBF,MACC,SAACC,GACC+N,GAAkB,SAACD,GAAD,OAAoBA,EAAiB,KAClC,aAAjB9N,EAAOoO,QACTkB,EAAGtP,EAAOuP,aAId,WACExB,GAAkB,SAACD,GAAD,OAAoBA,EAAiB,KACvDwB,UAKV,CAACxQ,EAAImO,IAvH4B,KAkIOjO,oBAAS,GAlIhB,GAkI5BwQ,EAlI4B,KAkIb9B,EAlIa,UAmIM1O,oBAAS,GAnIf,GAmI5ByQ,EAnI4B,KAmIVhC,EAnIU,KAqI7BiC,EAAYnI,iBAAO,MACnBoI,GAAepI,iBAAO,MAEtBpI,GAAWiE,EAAO5D,IAAI,YACxByJ,SAAS7F,EAAO5D,IAAI,aACpB,GA2BJ,OAzBAC,qBAAU,WACRiQ,EAAU7H,QAAQ+H,OAAOC,aAAazI,QAAQ,IAAIqF,MACjD,IAEHhN,qBAAU,WACRiQ,EAAU7H,QAAQ+H,OAAOE,WACxB,CAAClM,IAGJnE,qBAAU,WACRwO,EAAcnN,GACdgM,EAAShM,GACTsM,GAAc,KACb,CAACtM,IAEJrB,qBAAU,WACR,GAAIyN,EAAa,CACf,IAAMqB,EAAOmB,EAAU7H,QAAQ+H,OAAOC,aAAaE,WAAWzB,MAAM,MAAM/L,OAC1EmN,EAAU7H,QAAQ+H,OAAOI,SAASzB,GAClCmB,EAAU7H,QAAQ+H,OAAOK,kBACzBP,EAAU7H,QAAQ+H,OAAOM,QACzBtP,GAAe,MAEhB,CAACsM,IAGF,yBAAK9M,UAAU,mBACb,kBAAC,GAAD,CACE2K,kBAAmBA,EACnBC,QAAS,WACPrK,EAAiBqM,IAEnB/B,UAAW,WACTgD,EAAclB,MAGlB,kBAAC,IAAD,CACEuB,MAAM,WACN6B,YAAa,MACbC,QAAS,IACTC,QAAQ,UAER,kBAAC,IAAD,CACE/B,MAAM,aACN+B,QAAQ,SACRC,KAAM1M,GAAkBA,EAAelE,OAAS,MAAQ,KACxD6Q,eAAgB,kBAAMb,EAAU7H,QAAQ+H,OAAOE,WAE/C,yBAAK1P,UAAU,+BACb,kBAAC,IAAD,CACEoK,IAAKkF,EACLvI,KAAK,OACLqJ,MAAM,SACNC,YAAa,CAAEC,iBAAiB,GAChCvR,SAAUA,GACVwR,iBAAiB,EACjBC,OAAO,OACPC,MAAM,OACNC,MAAOhQ,EACPgM,SAAU,SAACiE,GACTpQ,EAAiBoQ,IAEnBC,OAAQ,SAACpB,GACPA,EAAOM,SAETe,gBAAgB,UAChBC,UAAW1B,KAEZxI,aAAA,EAAAA,EAAWQ,QACV,yBAAKpH,UAAU,OACb,0BAAMA,UAAU,gBAAgB4G,EAAUQ,SAG7CR,aAAA,EAAAA,EAAWmK,aACV,yBAAK/Q,UAAU,OACb,0BAAMA,UAAU,gBACb4G,EAAUmK,WAAW3J,SAIzBR,SAAA,UAAAA,EAAWoK,oBAAX,eAAyB7O,QAAS,GAClC,yBAAKnC,UAAU,OACd,0BAAMA,UAAU,iBAAhB,YACW4G,EAAUoK,aAAa7O,OADlC,YACmDyE,EAAUoK,aAAa7O,OAAS,EAAI,QAAU,OADjG,sDAON,kBAAC,EAAD,CAAW1D,OAAQ+E,KAEb,MAAPqJ,GAA6B,UAAdA,EAAImB,OAClB,yBAAKhO,UAAU,0BACb,kBAACiR,GAAA,EAAD,CAAcjR,UAAU,uCACxB,wBAAIA,UAAU,+EACZ,0BAAMA,UAAU,QAAhB,oCAEF,uBAAGA,UAAU,qCAAb,uHAKO,MAAP6M,GAA6B,eAAdA,EAAImB,OACrB,yBAAKhO,UAAU,0BACb,kBAACiR,GAAA,EAAD,CAAcjR,UAAU,uCACxB,wBAAIA,UAAU,+EACZ,kBAAC,IAAD,CAAaA,UAAU,2CACvB,0BAAMA,UAAU,QAAhB,8BAEF,uBAAGA,UAAU,qCAAb,KACK,IADL,oDAC2D,IAD3D,oHAMO,MAAP6M,GAAgBwC,EAgBZ,yBAAKrP,UAAU,wDACb,kBAACkR,EAAA,EAAD,CACEC,QAAO,UAAK3R,IAAOC,OAAZ,cAAwBf,EAAxB,iBACPsB,UAAU,cACVoR,gBAAiB,SAACC,GAChB9B,GAAa9H,QAAU4J,KAG3B,yBAAKrR,UAAU,2BACb,wBAAIA,UAAU,qBAAd,mBACA,uBAAGA,UAAU,oCAAb,iLAMCqP,GACC,yBAAKrP,UAAU,oBACb,4BACEA,UAAU,iCACVS,QAAS,WACP4M,GAAa,GACbC,GAAiB,GACjBiC,GAAa9H,SAAW8H,GAAa9H,YALzC,aAjCd,yBAAKzH,UAAU,UACb,kBAAC,GAAD,CACEwG,QAASkH,EAAiB,EAC1BjH,QAxIc,WACnBkE,GACHkD,EAAclB,IAuINjG,YAAa,kBAAM4G,GAAiB,IACpC3G,WAAY,kBAAM2G,GAAiB,IACnCzG,cAAeA,EACfD,UAAWA,EACXE,iBAAkB,WAChBwG,GAAiB,GACjBD,GAAa,U,28BCnS7B,IAAMiE,GAAQ7F,IAAI8F,QAAQ,aAAaD,MAgGxBE,GA9FY,SAAC,GAAiB,IAAfC,EAAe,EAAfA,KAAMC,EAAS,EAATA,GAAS,EACnB/S,oBAAhBgO,EADmC,EACnCA,MAAOgF,EAD4B,EAC5BA,KACTrC,EAAYnI,iBAAO,MAFkB,KAGfvI,mBAAS,MAHM,GAGpCgT,EAHoC,KAG5BC,EAH4B,KAmC3C,OA9BAxS,qBAAU,WACRiQ,EAAU7H,QAAQ+H,OAAOC,aAAazI,QAAQ,IAAIqF,MACjD,IAEHhN,qBAAU,WAOR,GALIuS,GACFtC,EAAU7H,QAAQ+H,OAAOsC,QAAQC,aAAaH,GAI5CH,EAAM,CAGR,IAAMO,EAAUP,EAAO,EACjBQ,GAASP,UAAMD,GAAQ,EAGvBS,EAAW5C,EAAU7H,QAAQ+H,OAAOsC,QAAQK,UAChD,IAAIb,GAAMU,EAAS,EAAGC,EAAO,GAC7B,kBACA,YAEFJ,EAAUK,GAGV5C,EAAU7H,QAAQ+H,OAAO4C,aAAaX,EAAO,GAAG,GAAO,GAAO,kBAE/D,CAACA,EAAMC,IAGR,yBAAK1R,UAAU,+BACb,yBAAKA,UAAU,+DACb,yBAAKA,UAAU,+BACb,uBAAGqS,KAAK,+BACN,yBAAKrS,UAAU,MAAMsS,IAAI,sBAAsBC,IAAI,iBAErD,0BAAMvS,UAAU,sBAAsB2R,IAExC,uBACE3R,UAAU,8FACVqS,KAAMpT,OAAOC,SAASmT,KAAKnE,MAAM,KAAK,GACtC5E,OAAO,SACPkJ,IAAI,cAEJ,yBACExS,UAAU,eACViB,MAAM,6BACNH,KAAK,OACLE,QAAQ,YACRD,OAAO,gBAEP,0BACEG,cAAc,QACdC,eAAe,QACfC,YAAY,IACZC,EAAE,kFAjBR,oBAuBF,yBAAKrB,UAAU,UACb,kBAAC,IAAD,CACEoK,IAAKkF,EACLvI,KAAK,OACLqJ,MAAM,SACNC,YAAa,CAAEC,iBAAiB,GAChCvR,SAAU,GACVwR,iBAAiB,EACjBC,OAAO,OACPC,MAAM,OACNC,MAAO/D,EACPkE,gBAAgB,UAChBC,UAAU,EACVF,OAAQ,SAACpB,GACPA,EAAOiD,wBAAuB,GAC9BjD,EAAOkD,SAASC,aAAaC,QAAQ1S,MAAM2S,QAAU,OACrDrD,EAAOsD,UAAU5S,MAAM6S,WAAa,IACpCvD,EAAOkD,SAASM,kBAElBC,qBAAqB,EACrBC,uBAAuB,OCxDlBC,GAvCQ,SAAC,GAA6B,IAA3BnT,EAA2B,EAA3BA,UAAWoT,EAAgB,EAAhBA,UAAgB,EAC9BzU,oBAAbD,EAD2C,EAC3CA,GAAIiT,EADuC,EACvCA,KACN3P,EAAOmF,iBAAO,IAepB,OACE,yBAAKnH,UAAWA,GACd,0BACEoK,IAAKpI,EACLqR,KAAK,UACLC,OAlBS,WACb,IAAMC,EAAUvR,EAAKyF,QAAQ+L,UACzBD,EAAQpR,OAAS,GAAKoR,IAAY5B,GACpCpS,MAAM,GAAD,OAAIC,IAAOC,OAAX,cAAuBf,EAAvB,SAAkC,CACrCgQ,OAAQ,MACRC,KAAM8E,KAAKC,UAAU,CAAE/B,KAAM4B,MAE/BH,KAEApR,EAAKyF,QAAQ+L,UAAY7B,GAUvBgC,UAAW,SAACtK,GAEQ,KAAdA,EAAEuK,SACJvK,EAAE6D,kBAGNlN,UAAU,kHACV6T,iBAAe,EACfC,YAAY,GAEXnC,K,28BCjCT,IA2LeoC,GA3LK,WAAM,SACInV,oBAAS,GADb,GACjBkM,EADiB,KACTC,EADS,KAElBiJ,EAAY,SAACC,EAAgBxC,EAAMC,GACvC,IAAIwC,EAAYD,EAAiB,SAAWxC,EAAO,GAC/C0C,EAAUF,EAAiB,OAASvC,EAAK,GAC7C,sLACEzS,OAAOC,SAASmT,KAAKnE,MAAM,KAAK,GADlC,iBAESgG,GAFT,OAEqBC,EAFrB,gBALsB,KAUoBvV,oBAAS,GAV7B,GAUjBqV,EAViB,KAUDG,EAVC,UAWAxV,mBAAS,GAXT,GAWjB6S,EAXiB,KAWX4C,EAXW,UAYJzV,mBAAS,GAZL,GAYjB8S,EAZiB,KAYb4C,EAZa,UAaQ1V,mBAAS,QAbjB,GAajB2V,EAbiB,KAaPC,EAbO,KAexB,OACE,oCACE,4BACE/T,QAAS,kBAAMsK,GAAU,IACzB/K,UAAU,6LAEV,yBACEA,UAAU,UACVc,KAAK,OACLC,OAAO,eACPC,QAAQ,YACRC,MAAM,8BAEN,0BACEC,cAAc,QACdC,eAAe,QACfC,YAAY,IACZC,EAAE,2CAGN,wCAEF,yBACErB,UAAS,gEACP8K,EAAS,cAAgB,kCAG3B,yBAAK9K,UAAU,0FACb,yBAAKA,UAAU,mCAAmCyU,cAAY,QAC5D,yBAAKzU,UAAU,6CAGjB,0BACEA,UAAU,qDACVyU,cAAY,QAFd,KAMA,yBACEzU,UAAU,6IACVqT,KAAK,SACLqB,aAAW,OACXC,kBAAgB,kBAEhB,yBAAK3U,UAAU,qFACb,yBAAKA,UAAU,2DACb,wBAAIA,UAAU,iEACZ,yBAAKA,UAAU,gHACb,yBACEA,UAAU,4BACVc,KAAK,OACLC,OAAO,eACPC,QAAQ,YACRC,MAAM,8BAEN,0BACEC,cAAc,QACdC,eAAe,QACfC,YAAY,IACZC,EAAE,4CAbV,oBAmBA,uBAAGrB,UAAU,yBAAb,4HAKA,6BACE,wBAAIA,UAAU,4CAAd,kBAGA,yBAAKA,UAAU,6GACb,4BACES,QAAS,WACPmU,YAAgBZ,EAAUC,EAAgBxC,EAAMC,IAChD8C,EAAY,UACZvJ,YAAW,WACTuJ,EAAY,UACX,MAELxU,UAAU,0GAETuU,GAEFP,EAAUC,EAAgBxC,EAAMC,IAEnC,yBAAK1R,UAAU,0BACb,2BACEA,UAAU,2CACV6U,QAAQ,kBAFV,mBAKE,2BACExR,KAAK,WACL3E,GAAG,eACHoW,QAASb,EACTvH,SAAU,SAACrD,GAAD,OAAO+K,EAAkB/K,EAAEC,OAAOwL,UAC5C9U,UAAU,iJAGbiU,GACC,oCACE,2BACEjU,UAAU,gDACV6U,QAAQ,QAFV,SAMA,2BACExR,KAAK,SACL3E,GAAG,OACHqW,IAAK,EACLrE,MAAOe,EACP/E,SAAU,SAACrD,GACT,IAAM2L,EAAInM,SAASQ,EAAEC,OAAOoH,OAC5B2D,EAAQW,GACJA,EAAItD,GACN4C,EAAMU,IAGVhV,UAAU,6IAEZ,2BACEA,UAAU,gDACV6U,QAAQ,QAFV,OAMA,2BACExR,KAAK,SACL3E,GAAG,OACHqW,IAAK,EACLrE,MAAOgB,EACPhF,SAAU,SAACrD,GACT,IAAM2L,EAAInM,SAASQ,EAAEC,OAAOoH,OAC5B4D,EAAMU,GACFA,EAAIvD,GACN4C,EAAQW,IAGZhV,UAAU,iJAOtB,yBAAKA,UAAU,gDACb,kBAAC,GAAD,CACEyR,KAAMwC,EAAiBxC,EAAO,KAC9BC,GAAIuC,EAAiBvC,EAAK,SAIhC,yBAAK1R,UAAU,6DACb,4BACES,QAAS,kBAAMsK,GAAU,IACzB/K,UAAU,yLAFZ,iB,28BClCCiV,UAlIQ,SAAC,GAAmC,IAAjCvW,EAAiC,EAAjCA,GAAIwW,EAA6B,EAA7BA,MAAOC,EAAsB,EAAtBA,UAC7BnS,GADmD,EAAX2O,KAC/B,IAAI3S,gBAAgBC,OAAOC,SAASC,SACnD,GAAI6D,EAAOoS,IAAI,SACb,OACE,kBAAC,GAAD,CAAoB3D,KAAMzO,EAAO5D,IAAI,QAASsS,GAAI1O,EAAO5D,IAAI,QAIjEC,qBAAU,WACRgW,YAAkBH,KACjB,CAACA,IAEJ,IAZyD,KA2BrBtW,oBAAS,GA3BY,GA2BlDmO,EA3BkD,KA2BtCC,EA3BsC,KA4BzD3N,qBAAU,WACR2N,GAAc,KACb,CAACtO,IA9BqD,IA+BjDiO,EAAUhO,oBAAVgO,MAEF2I,EACJ,yBAAKtV,UAAU,oCACb,yBAAKA,UAAU,kBACb,yBAAKA,UAAU,sDACf,kBAAC,GAAD,CACEA,UAAU,oBACVoT,UAAW,WACTpG,GAAc,MAGjBD,EACC,4BACEtM,QAAS0U,EA5BN,SAAC9L,GACZA,EAAE6D,iBACF3C,UAAQC,KAAKhL,IAAOC,OAAS,MAAQf,EAAK,UAP/B,SAAC2K,GACZA,EAAE6D,iBACF3C,UAAQC,KAAKhL,IAAOC,OAAS,MAAQf,EAAK,UAgClCsB,UAAU,6LAEV,wCAGF,oCACE,4BACES,QA/BI,WACdmU,YAAgBW,SAASrW,UACzBsW,YAAS,0CA8BCxV,UAAU,0FAEV,kCAAQtB,GACR,yBACEsB,UAAU,mDACVc,KAAK,OACLC,OAAO,eACPC,QAAQ,YACRC,MAAM,8BAEN,0BACEC,cAAc,QACdC,eAAe,QACfC,YAAY,IACZC,EAAE,4HAIR,kBAAC,GAAD,SAOJoU,EACJ,yBAAKzV,UAAU,4CACb,yBAAKA,UAAU,2BACb,kBAAC,EAAD,CACEuE,QACE,uBAAGvE,UAAU,mFAAb,2BAKF,uBAAGqS,KAAK,IAAIrS,UAAU,uCACpB,kBAAC,IAAD,CAASA,UAAU,eAIzB,yBAAKA,UAAU,2BACb,kBAAC,EAAD,CACEuE,QACE,uBAAGvE,UAAU,oFAAb,oBAKF,uBACEqS,KAAK,0CACL/I,OAAO,SACPkJ,IAAI,aACJxS,UAAU,uCAEV,kBAAC,IAAD,CAAYA,UAAU,gBAOhC,OACE,kBAAC0V,EAAA,EAAD,CACEC,MAAM,sBACNF,eAAgBA,EAChBH,cAAeA,GAEf,kBAAC,GAAD,CACE5I,SAAU,SAACiE,GACT3D,EAAc2D,IAAahE","file":"js/6.js?id=2ddf3f5c56416dbd9398","sourcesContent":["import React, { useEffect, useState } from 'react'\nimport config from '@/Config/config'\nimport { usePage } from '@inertiajs/inertia-react'\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'\nimport { LoadingIcon } from '@/Components/Icons'\nimport { prism } from 'react-syntax-highlighter/dist/esm/styles/prism'\n\nconst KMDViewer = ({ entity }) => {\n const { id } = usePage()\n const [kmd, setKMD] = useState(null)\n const params = new URLSearchParams(window.location.search)\n const fontSize = params.get('fontSize')\n\n useEffect(() => {\n if (entity && entity.hasKMD) {\n fetch(`${config.prefix}/p/${id}/kmd?path=${entity.path}`)\n .then((result) => result.json())\n .then((r) => setKMD(r.kmd))\n } else {\n setKMD(null)\n }\n }, [entity])\n\n if (!entity || !entity.hasKMD) {\n return null\n }\n\n if (fontSize) {\n prism['pre[class*=\"language-\"]'].fontSize = `${fontSize * 0.8}px`\n }\n\n return (\n
\n {fontSize && }\n

Kotlin metadata

\n {kmd ? (\n
\n \n {kmd}\n \n
\n ) : (\n
\n \n
\n )}\n
\n )\n}\n\nexport default KMDViewer\n","import React, { useEffect, useState } from 'react'\nimport config from '@/Config/config'\nimport { usePage } from '@inertiajs/inertia-react'\nimport { useEditorContentContext } from '@/Components/EditorContext'\n\nconst KeepRuleViewer = ({ entity }) => {\n const { id } = usePage()\n const [rule, setRule] = useState(null)\n const { setEditorContent, setScrollToEnd } = useEditorContentContext(null)\n\n useEffect(() => {\n if (entity) {\n fetch(`${config.prefix}/p/${id}/rule?path=${entity.path}`)\n .then((result) => result.json())\n .then((r) => setRule(r.rule))\n } else {\n setRule(null)\n }\n }, [entity])\n\n if (!entity) {\n return null\n }\n\n return
\n
\n {rule}\n
\n \n
\n}\nexport default KeepRuleViewer\n","import React from 'react'\nimport { AccessFlags } from '@/utils'\n\nimport { useSelectedEntityContext } from '@/Components/EntityContext'\nimport KeepRuleViewer from './KeepRuleViewer'\n\nconst CrossIcon = (props) => (\n \n \n \n)\n\nconst CheckIcon = (props) => (\n \n \n \n)\n\nfunction classAccessModifier(accessFlags) {\n let accessModifiers = ''\n if (accessFlags & AccessFlags.PUBLIC) {\n accessModifiers += 'public '\n }\n if (accessFlags & AccessFlags.FINAL) {\n accessModifiers += 'final '\n }\n if (accessFlags & AccessFlags.STATIC) {\n accessModifiers += 'static '\n }\n if (\n accessFlags & AccessFlags.ABSTRACT &&\n (accessFlags & AccessFlags.INTERFACE) == 0\n ) {\n accessModifiers += 'abstract '\n }\n if (accessFlags & AccessFlags.INTERFACE) {\n accessModifiers += 'interface '\n } else {\n accessModifiers += 'class '\n }\n return accessModifiers\n}\n\nconst ClassDetails = ({ entity }) => (\n
\n

\n {classAccessModifier(entity.accessFlags)}\n {entity.text}\n

\n\n
\n
Extends
\n
\n {entity.superClass || '-'}\n
\n
Implements
\n
\n {entity.interfaces.length > 0\n ? entity.interfaces.map((interf, idx) => (\n
\n {interf}\n {idx < entity.interfaces.length - 1 && ','}\n
\n ))\n : '-'}\n
\n
\n
\n)\n\nfunction methodAccessModifier(accessFlags) {\n let accessModifiers = ''\n if (accessFlags & AccessFlags.PUBLIC) {\n accessModifiers += 'public '\n }\n if (accessFlags & AccessFlags.PRIVATE) {\n accessModifiers += 'private '\n }\n if (accessFlags & AccessFlags.PROTECTED) {\n accessModifiers += 'protected '\n }\n if (accessFlags & AccessFlags.FINAL) {\n accessModifiers += 'final '\n }\n if (accessFlags & AccessFlags.STATIC) {\n accessModifiers += 'static '\n }\n if (accessFlags & AccessFlags.SYNCHRONIZED) {\n accessModifiers += 'synchronized '\n }\n if (accessFlags & AccessFlags.NATIVE) {\n accessModifiers += 'native '\n }\n if (accessFlags & AccessFlags.ABSTRACT) {\n accessModifiers += 'abstract '\n }\n if (accessFlags & AccessFlags.SYNTHETIC) {\n accessModifiers += 'synthetic '\n }\n\n return accessModifiers\n}\n\nconst MethodDetails = ({ entity }) => (\n
\n

\n
\n        \n          {methodAccessModifier(entity.accessFlags)}\n          {entity.returnType} {entity.simpleName}(\n          {entity.params.length == 0 && ')'}\n        \n        {entity.params.map((p, idx) => {\n          return (\n            \n              {p},\n            \n          )\n        })}\n        {entity.params.length > 0 && )}\n      
\n

\n
\n)\n\nfunction fieldAccessModifier(accessFlags) {\n let accessModifiers = ''\n if (accessFlags & AccessFlags.PUBLIC) {\n accessModifiers += 'public '\n }\n if (accessFlags & AccessFlags.PRIVATE) {\n accessModifiers += 'private '\n }\n if (accessFlags & AccessFlags.PROTECTED) {\n accessModifiers += 'protected '\n }\n if (accessFlags & AccessFlags.FINAL) {\n accessModifiers += 'final '\n }\n if (accessFlags & AccessFlags.STATIC) {\n accessModifiers += 'static '\n }\n if (accessFlags & AccessFlags.VOLATILE) {\n accessModifiers += 'volatile '\n }\n if (accessFlags & AccessFlags.TRANSIENT) {\n accessModifiers += 'transient '\n }\n if (accessFlags & AccessFlags.SYNTHETIC) {\n accessModifiers += 'synthetic '\n }\n return accessModifiers\n}\n\nconst FieldDetails = ({ entity }) => (\n
\n

\n \n {fieldAccessModifier(entity.accessFlags)}\n {entity.type} {entity.simpleName}\n \n

\n
\n)\n\nconst DONT_SHRINK = 0x00100000 // Marks whether an entity should not be shrunk.\nconst DONT_OPTIMIZE = 0x00200000 // Marks whether an entity should not be optimized.\nconst DONT_OBFUSCATE = 0x00400000 // Marks whether an entity should not be obfuscated.\n// const OBFUSCATE_CODE = 0xc0000000 // Marks whether a code attribute should be obfuscated.\n\nconst EntityDetails = () => {\n const {\n selectedEntity: entity,\n setSelectedEntity,\n keptEntities,\n } = useSelectedEntityContext()\n\n if (entity == null) {\n return null\n }\n\n const params = new URLSearchParams(window.location.search)\n const fontSize = params.get('fontSize')\n\n let details\n switch (entity.icon) {\n case 'class':\n details = \n break\n case 'method':\n details = \n break\n case 'field':\n details = \n break\n }\n\n const icon = (enabled) =>\n enabled ? (\n \n ) : (\n \n )\n\n const keptEntity = keptEntities ? keptEntities[entity.id] : null\n\n return (\n
\n {fontSize && (\n \n )}\n
\n
\n {details}\n
\n {keptEntity ? (\n <>\n

Applied Keep Modifiers

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Allow obfuscation\n {icon((keptEntity.processingFlags & DONT_OBFUSCATE) == 0)}\n
Allow shrinking\n {icon((keptEntity.processingFlags & DONT_SHRINK) == 0)}\n
Allow optimization\n {icon((keptEntity.processingFlags & DONT_OPTIMIZE) == 0)}\n
\n \n ) : (\n \n No keep rule applied\n \n )}\n
\n {!keptEntity &&
\n

Suggested Keep Rule

\n \n
\n }\n
\n {\n setSelectedEntity(null)\n }}\n >\n \n \n
\n
\n )\n}\n\nexport default EntityDetails\n","import React, { useState } from 'react'\nimport classNames from 'classnames'\n\nconst positionClasses = {\n right: 'top-0 left-full ml-6',\n bottom: 'right-0 top-full mt-2',\n}\n\nconst Tooltip = ({\n children,\n position,\n content,\n disabled,\n wrapperClassName,\n}) => {\n const [show, setShow] = useState(false)\n const pos = position || 'right'\n return (\n setShow(true)}\n onMouseLeave={() => setShow(false)}\n >\n {children}\n {show && !disabled ? (\n \n {content}\n \n ) : null}\n \n )\n}\n\nexport default Tooltip\n","import React, { useState, useEffect, useRef } from 'react'\nimport $ from 'jquery'\nimport { Inertia } from '@inertiajs/inertia'\nimport { usePage } from '@inertiajs/inertia-react'\nimport { useSelectedEntityContext } from '@/Components/EntityContext'\n\nimport EntityDetails from '@/Components/EntityDetails'\nimport AppSweep from '@/Components/AppSweep'\nimport config from '@/Config/config'\nimport Tooltip from '@/Components/Tooltip'\nimport { LoadingIcon } from '@/Components/Icons'\nimport { AccessFlags } from '@/utils'\n\n/**\n * Allows to customize nodes when they are drawn.\n * https://github.com/Lusito/jstree/blob/node-customize/src/jstree-node-customize.js\n */\n;(function ($) {\n 'use strict'\n\n if ($.jstree.plugins.node_customize) {\n return\n }\n\n /**\n * the settings object.\n * key is the attribute name to select the customizer function from switch.\n * switch is a key => function(el, node) map.\n * default: function(el, node) will be called if the type could not be mapped\n * @name $.jstree.defaults.node_customize\n * @plugin node_customize\n */\n $.jstree.defaults.node_customize = {\n key: 'type',\n switch: {},\n default: null,\n }\n\n $.jstree.plugins.node_customize = function (options, parent) {\n this.redraw_node = function (obj) {\n var el = parent.redraw_node.apply(this, arguments)\n if (el) {\n var node = this.get_node(obj)\n var cfg = this.settings.node_customize\n var key = cfg.key\n var type = node && node.original && node.original[key]\n var customizer = (type && cfg.switch[type]) || cfg.default\n if (customizer) customizer(el, node)\n }\n return el\n }\n }\n})($)\n\nconst NewFileIcon = () => (\n \n \n \n)\n\nconst CollapseAllIcon = () => (\n \n \n \n)\n\nconst TrimIcon = () => (\n \n \n \n)\n\nconst NORMAL_MODE = 'normal'\nconst TRIM_MODE = 'trim'\n\nconst EntityViewer = ({\n loading,\n onReady,\n onTrimEnter,\n onTrimExit,\n runResult,\n fetchEntities,\n onChangeAPKEnter,\n}) => {\n const params = new URLSearchParams(window.location.search)\n const [mode, setMode] = useState(NORMAL_MODE)\n const {\n selectedEntity,\n setSelectedEntity,\n setKeptEntities,\n } = useSelectedEntityContext()\n const treeContainer = useRef(null)\n const { id } = usePage()\n const [previousRunResult, setPreviousRunResult] = useState({\n error: null,\n hasKeptEntities: {},\n keptEntities: {},\n })\n const previousRunResultRef = useRef(previousRunResult)\n\n useEffect(() => {\n previousRunResultRef.current = previousRunResult\n }, [previousRunResult])\n\n const treeData = {\n core: {\n // lazy data loading (gets called on opening a node with childeren = true)\n data: (node, passDataToTreeCallback) => {\n const tree = $(treeContainer.current).jstree(true)\n const path = tree.get_path(node, '-', true) || ''\n const markKeptLoadedChildren = (children) => {\n for (const child of children) {\n if (previousRunResultRef?.current.hasKeptEntities?.[child.id]) {\n child.type = 'has_kept'\n }\n if (previousRunResultRef?.current.keptEntities?.[child.id]) {\n child.type = 'kept'\n }\n }\n passDataToTreeCallback(children)\n }\n fetchEntities(path, markKeptLoadedChildren)\n },\n dblclick_toggle: false,\n themes: {\n dots: false,\n },\n },\n types: {\n kept: {\n a_attr: { 'data-kept': true },\n },\n has_kept: {\n a_attr: { 'data-has-kept': true },\n },\n },\n checkbox: {\n visible: false,\n whole_node: false,\n tie_selection: false,\n },\n node_customize: {\n default: function (el, node) {\n if (params.get('fontSize')) {\n const entityAnchor = $(el).find('.jstree-anchor')\n entityAnchor.css('fontSize', parseInt(params.get('fontSize')) * 0.6)\n }\n if (node.icon !== 'package') {\n const entityIcon = $(el).find('.jstree-themeicon')\n const icon = $('').addClass('jstree-icon')\n if (node.original.accessFlags & AccessFlags.PUBLIC) {\n icon.addClass('public').insertAfter(entityIcon)\n } else if (node.original.accessFlags & AccessFlags.PROTECTED) {\n icon.addClass('protected').insertAfter(entityIcon)\n } else if (node.original.accessFlags & AccessFlags.PRIVATE) {\n icon.addClass('private').insertAfter(entityIcon)\n }\n\n if (node.original.hasKMD) {\n const entityAnchor = $(el).find('.jstree-anchor')\n const icon = $('').addClass('jstree-icon')\n icon.addClass('kmd').appendTo(entityAnchor)\n }\n }\n },\n },\n plugins: ['types', 'checkbox', 'node_customize'],\n }\n\n // Initialize the JSTree in the treecontainer. Call the onReady function\n // when the tree is ready.\n useEffect(() => {\n if (fetchEntities) {\n if ($(treeContainer.current).jstree(true)) {\n $(treeContainer.current).jstree(true).destroy()\n }\n\n $(treeContainer.current).jstree(treeData)\n $(treeContainer.current).on('ready.jstree', onReady)\n $(treeContainer.current).on('dblclick', '.jstree-anchor', function (e) {\n if (!e.target.classList.contains('jstree-checkbox')) {\n $(this).jstree(true).toggle_node(e.target)\n }\n })\n $(treeContainer.current).on('click', '.jstree-anchor', function (e) {\n if (!e.target.classList.contains('jstree-checkbox')) {\n const entity = $(this).jstree(true).get_node(e.target).original\n if (entity.icon !== 'package') {\n const tree = $(treeContainer.current).jstree(true)\n setSelectedEntity({\n ...entity,\n path: tree.get_path(e.target, '-', true),\n })\n }\n }\n })\n }\n }, [fetchEntities])\n\n useEffect(() => {\n if (runResult?.error === null) {\n const tree = $(treeContainer.current).jstree(true)\n if (!tree) {\n return\n }\n const nodes = tree.get_json(null, {\n flat: true,\n })\n for (const node of nodes) {\n tree.set_type(node.id, 'default')\n if (runResult.hasKeptEntities[node.id]) {\n tree.set_type(node.id, 'has_kept')\n }\n if (runResult.keptEntities[node.id]) {\n tree.set_type(node.id, 'kept')\n }\n }\n tree.redraw()\n setPreviousRunResult(runResult)\n setKeptEntities(runResult.keptEntities)\n }\n }, [runResult])\n\n const collapseAll = () => {\n $(treeContainer.current).jstree(true).close_all()\n }\n\n const enterTrimMode = () => {\n $(treeContainer.current).jstree(true).show_checkboxes()\n setMode(TRIM_MODE)\n setSelectedEntity(null)\n onTrimEnter()\n }\n\n const exitTrimMode = () => {\n $(treeContainer.current).jstree(true).hide_checkboxes()\n setMode(NORMAL_MODE)\n onTrimExit()\n }\n\n const trimAndFork = () => {\n const trimmed = $(treeContainer.current).jstree(true).get_checked()\n if (trimmed.length == 0) {\n exitTrimMode()\n } else {\n Inertia.post(\n config.prefix + '/p/' + id + '/trim',\n {\n trimmed: trimmed,\n },\n {\n onSuccess: () => {\n exitTrimMode()\n },\n },\n )\n }\n }\n\n return (\n
\n \n
\n
\n Application Entities\n {loading && (\n \n )}\n
\n
\n \n Try another file\n

\n }\n position=\"bottom\"\n >\n {\n setSelectedEntity(null)\n onChangeAPKEnter()\n }}\n >\n \n \n \n \n Trim entities\n

\n }\n position=\"bottom\"\n >\n \n \n \n \n \n Collapse all\n

\n }\n position=\"bottom\"\n >\n \n \n \n \n
\n
\n
\n
\n
\n {mode === TRIM_MODE && (\n
\n

Trim Entities

\n

\n Trimming allows you to create a fork of this playground while\n removing the selected entities. This could be useful when sharing\n your playground online.\n

\n
\n \n Trim & Fork\n \n \n Cancel\n \n
\n
\n )}\n \n
\n )\n}\n\nexport default EntityViewer\n","import React, { useState, useEffect } from 'react'\nimport { Transition } from '@headlessui/react'\n\nconst UnsavedChangesDialog = ({ hasUnsavedChanges, onApply, onDiscard }) => {\n const [isOpen, setIsOpen] = useState(false)\n const params = new URLSearchParams(window.location.search)\n const nosave = params.get('nosave') === 'true'\n\n useEffect(() => {\n if (hasUnsavedChanges) {\n setTimeout(() => setIsOpen(true), 1000)\n }\n }, [hasUnsavedChanges])\n\n if (nosave) {\n return null\n }\n\n return (\n
\n \n We found some previously unsaved changes for this playground.\n
\n {\n onApply()\n setIsOpen(false)\n }}\n >\n Apply changes\n \n {\n onDiscard()\n setIsOpen(false)\n }}\n >\n Discard\n \n
\n \n
\n )\n}\n\nexport default UnsavedChangesDialog\n","import 'ace-builds/src-noconflict/mode-java'\n\nexport class ProguardHighlightRules extends window.ace.acequire(\n 'ace/mode/text_highlight_rules',\n).TextHighlightRules {\n constructor() {\n super()\n\n var fileOptions =\n '(' +\n '-@|' +\n '-include|' +\n '-basedirectory|' +\n '-injars|' +\n '-outjars|' +\n '-libraryjars|' +\n '-pluginjars|' +\n '-keepdirectories|' +\n '-performanceprofile|' +\n '-dontcompress|' +\n '-printseeds|' +\n '-keepresourcefiles|' +\n '-printusage|' +\n '-printmapping|' +\n '-applymapping|' +\n '-printresourcefilenamemapping|' +\n '-applyresourcemapping|' +\n '-obfuscationdictionary|' +\n '-classobfuscationdictionary|' +\n '-packageobfuscationdictionary|' +\n '-obfuscatejavascript|' +\n '-javascriptconfiguration|' +\n '-javascriptplugin|' +\n '-adaptresourcefilecontents|' +\n '-resourcefilenameobfuscationdictionary|' +\n '-encryptassetfiles|' +\n '-encryptresourcefiles|' +\n '-encryptnativelibraries|' +\n '-printclassencryption|' +\n '-printstringencryption|' +\n '-printassetencryption|' +\n '-printresourceencryption|' +\n '-printnativelibraryencryption|' +\n '-keystore|' +\n '-pkcs11configuration|' +\n '-certificateschemes|' +\n '-printconfiguration|' +\n '-printlibraryconfiguration|' +\n '-printstatistics|' +\n '-dump|' +\n '-keepresources|' +\n '-keepresourcexmlelements|' +\n '-keepresourcexmlattributenames|' +\n '-encryptresources' +\n ')\\\\s+'\n var options =\n '-@|' +\n '-include|' +\n '-basedirectory|' +\n '-injars|' +\n '-outjars|' +\n '-libraryjars|' +\n '-pluginjars|' +\n '-skipnonpubliclibraryclasses|' +\n '-dontskipnonpubliclibraryclasses|' +\n '-dontskipnonpubliclibraryclassmembers|' +\n '-keepdirectories|' +\n '-multidex|' +\n '-printmaindexlist|' +\n '-splitdexfile|' +\n '-instantappfeatures|' +\n '-performanceprofile|' +\n '-splitdimensions|' +\n '-dontcompress|' +\n '-zipalign|' +\n '-target|' +\n '-forceprocessing|' +\n '-printseeds|' +\n '-keepresourcefiles|' +\n '-keepresources|' +\n '-keepresourcexmlelements|' +\n '-printusage|' +\n '-printresourceusage|' +\n '-dontshrink|' +\n '-dontoptimize|' +\n '-optimizations|' +\n '-optimizationpasses|' +\n '-allowaccessmodification|' +\n '-mergeinterfacesaggressively|' +\n '-dontobfuscate|' +\n '-printmapping|' +\n '-applymapping|' +\n '-printresourcefilemapping|' +\n '-applyresourcemapping|' +\n '-obfuscationdictionary|' +\n '-classobfuscationdictionary|' +\n '-packageobfuscationdictionary|' +\n '-overloadaggresively|' +\n '-useuniqueclassmembernames|' +\n '-dontusemixedcaseclassnames|' +\n '-keeppackagenames|' +\n '-flattenpackagehierarchy|' +\n '-repackageclasses|' +\n '-keepattributes|' +\n '-keepparameternames|' +\n '-renamesourcefileattribute|' +\n '-accessthroughreflection|' +\n '-obfuscatecode|' +\n '-virtualizecode|' +\n '-obfuscatejavascript|' +\n '-javascriptconfiguration|' +\n '-javascriptplugin|' +\n '-encryptstrings|' +\n '-adaptkotlinmetadata|' +\n '-adaptresourcefilenames|' +\n '-adaptresourcefilecontents|' +\n '-resourcefilenameobfuscationdictionary|' +\n '-keepresourcexmlattributenames|' +\n '-encryptmetadata|' +\n '-encryptassetfiles|' +\n '-encryptresources|' +\n '-encryptresourcefiles|' +\n '-encryptnativelibraries|' +\n '-pack|' +\n '-randomizationseed|' +\n '-printclassencryption|' +\n '-printstringencryption|' +\n '-printassetencryption|' +\n '-printresourceencryption|' +\n '-printnativelibraryencryption|' +\n '-dontpreverify|' +\n '-microedition|' +\n '-android|' +\n '-dalvik|' +\n '-protobuf|' +\n '-keystore|' +\n '-keystorepassword|' +\n '-keyalias|' +\n '-keypassword|' +\n '-pkcs11configuration|' +\n '-certificatelineage|' +\n '-apksignatureschemes|' +\n '-verbose|' +\n '-dontnote|' +\n '-dontwarn|' +\n '-ignorewarnings|' +\n '-printconfiguration|' +\n '-printlibraryconfiguration|' +\n '-printstatistics|' +\n '-dump|' +\n '-addconfigurationdebugging|' +\n '-whiteboxencryptionkeys'\n var keepOptions =\n '-keepclassmembers|' +\n '-keepclasseswithmembers|' +\n '-keepnames|' +\n '-keepclassmembernames|' +\n '-keepclasseswithmembernames|' +\n '-keepcode|' +\n '-keep|' +\n '-if|' +\n '-assumenosideeffects|' +\n '-assumenoexternalsideeffects|' +\n '-assumenoescapingparameters|' +\n '-assumenoexternalreturnvalues|' +\n '-assumevalues|' +\n '-distinctclassmembernames|' +\n '-encryptclasses|' +\n '-adaptclassstrings'\n var keepOptionModifiers =\n 'includedescriptorclasses|' +\n 'includecode|' +\n 'allowshrinking|' +\n 'allowoptimization|' +\n 'allowobfuscation|' +\n 'inmaindex'\n\n this.$rules = {\n start: [\n {\n token: 'comment',\n regex: '#.*$',\n },\n {\n token: 'language.constant',\n regex: fileOptions,\n next: 'filenamefilter',\n },\n {\n token: 'language.constant',\n regex: options,\n },\n {\n token: 'language.constant',\n regex: keepOptions,\n next: 'modifiers',\n },\n {\n token: 'keyword',\n regex:\n '(?:abstract|const|enum|final|implements|native|private|protected|public|static|strictfp|super|synchronized|throws|transient|volatile)\\\\b',\n },\n {\n token: ['operator', 'string'],\n regex: '(@)([^\\\\s]+)',\n },\n {\n token: 'keyword',\n regex: '(class|interface)\\\\s+',\n next: 'classfilter',\n },\n {\n token: 'support.function',\n regex: '()(?=;)',\n },\n {\n token: 'support.function',\n regex: '()(?=;)',\n },\n {\n token: 'support.function',\n regex: '(\\\\*)(?=;)',\n },\n {\n token: 'support.function',\n regex:\n '((?:(?:[^\\\\W\\\\d\\\\$]|\\\\$)[\\\\w.\\\\[\\\\]$<>]*\\\\s+)*?)(!?[a-zA-Z\\\\$\\\\?\\\\*\\\\d\\\\.]+)(\\\\s*)(?=;)',\n },\n {\n token: ['string', 'support.function', 'text', 'text'],\n regex:\n '((?:(?:[^\\\\W\\\\d]|\\\\$)[\\\\w.\\\\[\\\\]$<>]*\\\\s+)*?)(!?[a-zA-Z\\\\$\\\\?\\\\*\\\\d\\\\.]+|\\\\|\\\\)(\\\\s*)(\\\\()',\n },\n {\n token: ['string', 'operator', 'operator', 'string'],\n regex:\n '(boolean|byte|char|double|float|int|long|short|void)|(\\\\.\\\\.\\\\.)|(\\\\*\\\\*\\\\*)|([\\\\w\\\\d_\\\\.\\\\?\\\\*]+)',\n },\n {\n token: 'text',\n regex: \"[{}();:,']\",\n },\n ],\n filenamefilter: [\n {\n token: 'variable.parameter',\n regex: '.*',\n next: 'start',\n },\n ],\n modifiers: [\n {\n token: 'text',\n regex: '\\\\s+',\n next: 'start',\n },\n {\n token: 'text',\n regex: ',',\n },\n {\n token: 'variable.parameter',\n regex: keepOptionModifiers,\n },\n ],\n classfilter: [\n {\n token: 'support.function',\n regex:\n '([a-zA-Z$?\\\\*\\\\d.,!\\\\s]+(?:\\\\s+(?:extends|implements)\\\\s+(?:[a-zA-Z$?\\\\*\\\\d.,!\\\\s]+))?)',\n next: 'start',\n },\n ],\n }\n\n this.normalizeRules()\n }\n}\n\nexport default class ProguardMode extends window.ace.acequire('ace/mode/java')\n .Mode {\n constructor() {\n super()\n this.HighlightRules = ProguardHighlightRules\n this.lineCommentStart = '#'\n }\n}\n","import React, { useEffect, useState, useCallback, useRef } from 'react'\nimport { useSelectedEntityContext } from '@/Components/EntityContext'\nimport { useEditorContentContext } from '@/Components/EditorContext'\nimport SplitPane from 'react-split-pane'\nimport KMDViewer from '@/Components/KMDViewer'\nimport AceEditor from 'react-ace'\nimport { Inertia } from '@inertiajs/inertia'\nimport { usePage } from '@inertiajs/inertia-react'\nimport debounce from 'lodash.debounce'\nimport Uploadzone from '@/Components/Uploadzone'\nimport { toFormData, useInterval } from '@/utils'\nimport EntityViewer from '@/Components/EntityViewer'\nimport UnsavedChangesDialog from '@/Components/UnsavedChangesDialog'\nimport ProGuardLogo from '@/Components/ProGuardLogo'\nimport config from '@/Config/config'\nimport { LoadingIcon } from '@/Components/Icons'\n\nimport 'ace-builds/src-noconflict/mode-text'\nimport 'ace-builds/src-noconflict/theme-clouds'\nimport 'ace-builds/src-noconflict/keybinding-sublime'\n\nimport ProguardMode from '@/ProguardMode.js'\n\nconst ENTITY_POLLING_INTERVAL = 5000 // Poll for processed entities every 5s.\nconst EDITOR_DEBOUNCE_PERIOD = 500\n\n// Removes comments, whitespace and newlines from rules\nconst trimRules = (rules) => {\n return rules\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .join('')\n}\n\nconst Playground = ({ onChange }) => {\n const { id, rules, sessionRules, hasUnsavedChanges, apk } = usePage()\n const { selectedEntity, setSelectedEntity } = useSelectedEntityContext()\n const { editorContent, setEditorContent, scrollToEnd, setScrollToEnd } = useEditorContentContext()\n const params = new URLSearchParams(window.location.search)\n const nosave = params.get('nosave') === 'true'\n\n // Accidentally going back in your browser could cause you to lose changes.\n // The beforeunload event fires when this happens and gives the user the\n // opportunity to cancel. The implementation below targets all browsers.\n // For more info, see: https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event\n const [hasChanges, setHasChanges] = useState(false)\n const handleOnBeforeUnload = (e) => {\n e.preventDefault()\n e.returnValue = 'Are you sure?'\n return e.returnValue\n }\n\n const previousRules = useRef('')\n\n useEffect(() => {\n previousRules.current = ''\n setHasChanges(false)\n setChangeAPK(false)\n setEditorEnabled(true)\n setRunResult(null)\n setSelectedEntity(null)\n setEditorContent(rules)\n }, [id])\n\n useEffect(() => {\n if (!hasChanges) {\n return\n }\n\n if (!nosave) {\n window.addEventListener('beforeunload', handleOnBeforeUnload)\n return () => {\n window.removeEventListener('beforeunload', handleOnBeforeUnload)\n }\n }\n }, [handleOnBeforeUnload, hasChanges])\n\n // Incremented every time we call runPlayground, decremented every time a call finishes.\n // As long as this number is non-zero, we should show a loading icon.\n const [activeRequests, setActiveRequests] = useState(0)\n const runRequestAbortContoller = useRef(null)\n const [runResult, setRunResult] = useState(null)\n const runPlayground = useCallback(\n debounce((rules) => {\n if (apk != null && apk.status != 'Processed') {\n return\n }\n\n // check if significant changes were made to rules\n const trimmedRules = trimRules(rules)\n if (previousRules.current == trimmedRules) {\n return\n }\n previousRules.current = trimmedRules\n\n const controller = new AbortController()\n runRequestAbortContoller.current = controller\n setActiveRequests((activeRequests) => activeRequests + 1)\n fetch(`${config.prefix}/p/${id}`, {\n method: 'put',\n body: toFormData({\n rules: rules,\n }),\n signal: controller.signal,\n })\n .then((res) => res.json())\n .then(\n (result) => {\n setActiveRequests((activeRequests) => activeRequests - 1)\n setRunResult(result)\n },\n // on error\n () => {\n setActiveRequests((activeRequests) => activeRequests - 1)\n },\n )\n }, EDITOR_DEBOUNCE_PERIOD),\n [id, apk],\n )\n\n // If the application is not yet processed (and thus allEntities is null),\n // poll the server until the entitites are returned.\n useInterval(\n () => {\n Inertia.replace(`${config.prefix}/p/${id}`, {\n method: 'get',\n only: ['apk'],\n })\n },\n apk != null && apk.status == 'Unprocessed' ? ENTITY_POLLING_INTERVAL : null,\n )\n\n const fetchEntities = useCallback(\n (path, cb) => {\n if (apk != null) {\n setActiveRequests((activeRequests) => activeRequests + 1)\n fetch(`${config.prefix}/p/${id}/entities?path=${path}`)\n .then((res) => res.json())\n .then(\n (result) => {\n setActiveRequests((activeRequests) => activeRequests - 1)\n if (result.status == 'Processed') {\n cb(result.entities)\n }\n },\n // on error\n () => {\n setActiveRequests((activeRequests) => activeRequests - 1)\n cb()\n },\n )\n }\n },\n [id, apk],\n )\n\n // Run the playground for a first time when the entity tree is initialized.\n const entityViewerReady = () => {\n if (!hasUnsavedChanges) {\n runPlayground(rules)\n }\n }\n\n // Keep a state variable to enable/disable the editor in trim mode\n const [editorEnabled, setEditorEnabled] = useState(true)\n const [changeAPKEnabled, setChangeAPK] = useState(false)\n\n const editorRef = useRef(null)\n const cancelUpload = useRef(null)\n\n const fontSize = params.get('fontSize')\n ? parseInt(params.get('fontSize'))\n : 16\n\n useEffect(() => {\n editorRef.current.editor.getSession().setMode(new ProguardMode())\n }, [])\n\n useEffect(() => {\n editorRef.current.editor.resize()\n }, [selectedEntity])\n\n\n useEffect(() => {\n runPlayground(editorContent)\n onChange(editorContent)\n setHasChanges(true)\n }, [editorContent])\n\n useEffect(() => {\n if (scrollToEnd) {\n const line = editorRef.current.editor.getSession().getValue().split(\"\\n\").length\n editorRef.current.editor.gotoLine(line);\n editorRef.current.editor.navigateLineEnd();\n editorRef.current.editor.focus();\n setScrollToEnd(false)\n }\n }, [scrollToEnd])\n\n return (\n
\n {\n setEditorContent(sessionRules)\n }}\n onDiscard={() => {\n runPlayground(rules)\n }}\n />\n \n editorRef.current.editor.resize()}\n >\n
\n {\n setEditorContent(newRules)\n }}\n onLoad={(editor) => {\n editor.focus()\n }}\n keyboardHandler=\"sublime\"\n readOnly={!editorEnabled}\n />\n {runResult?.error && (\n
\n {runResult.error}\n
\n )}\n {runResult?.parseError && (\n
\n \n {runResult.parseError.error}\n \n
\n )}\n {runResult?.parseWarning?.length > 0 && (\n
\n \n Ignoring {runResult.parseWarning.length} unknown {runResult.parseWarning.length > 1 ? 'rules' : 'rule'}: ProGuard / R8 -keep rules processed as normal.\n \n
\n )}\n
\n\n \n \n {apk != null && apk.status == 'Failed' ? (\n
\n \n

\n Whoops... something went wrong!\n

\n

\n Something unexpectedly went wrong while processing your uploaded\n file. Please try uploading your file again later.\n

\n
\n ) : apk != null && apk.status == 'Unprocessed' ? (\n
\n \n

\n \n Processing application...\n

\n

\n We{\"'\"}re still processing your uploaded file. Once that{\"'\"}s\n done, the entities in your application will be shown here and your\n keep rules will be evaluated against them.\n

\n
\n ) : apk != null && !changeAPKEnabled ? (\n
\n 0}\n onReady={entityViewerReady}\n onTrimEnter={() => setEditorEnabled(false)}\n onTrimExit={() => setEditorEnabled(true)}\n fetchEntities={fetchEntities}\n runResult={runResult}\n onChangeAPKEnter={() => {\n setEditorEnabled(false)\n setChangeAPK(true)\n }}\n />\n
\n ) : (\n
\n {\n cancelUpload.current = cancel\n }}\n />\n
\n

Upload new file

\n

\n Uploading a new file allows you to quickly evaluate your keep\n rules against the entities of an APK or jar. A new fork with\n your uploaded file and keep rules will be created.\n

\n\n {changeAPKEnabled && (\n
\n {\n setChangeAPK(false)\n setEditorEnabled(true)\n cancelUpload.current && cancelUpload.current()\n }}\n >\n Cancel\n \n
\n )}\n
\n
\n )}\n \n
\n )\n}\n\nexport default Playground\n","import React, { useEffect, useRef, useState } from 'react'\nimport AceEditor from 'react-ace'\nimport { usePage } from '@inertiajs/inertia-react'\n\nimport 'ace-builds/src-noconflict/mode-text'\nimport 'ace-builds/src-noconflict/theme-clouds'\nimport 'ace-builds/src-noconflict/keybinding-sublime'\n\nimport ProguardMode from '@/ProguardMode.js'\n\nconst Range = ace.require('ace/range').Range\n\nconst EmbeddedPlayground = ({ from, to }) => {\n const { rules, name } = usePage()\n const editorRef = useRef(null)\n const [marker, setMarker] = useState(null)\n\n useEffect(() => {\n editorRef.current.editor.getSession().setMode(new ProguardMode())\n }, [])\n\n useEffect(() => {\n // If a marker was previously set, remove it\n if (marker) {\n editorRef.current.editor.session.removeMarker(marker)\n }\n\n // If the from parameter is set, we want to highlight\n if (from) {\n // If the to parameter is set, highlight up until to.\n // If not, highlight just the from line.\n const fromIdx = from - 1\n const toIdx = (to ?? from) - 1\n\n // Set the marker to highlight the code\n const markerId = editorRef.current.editor.session.addMarker(\n new Range(fromIdx, 0, toIdx, 1),\n 'ace_active-line',\n 'fullLine',\n )\n setMarker(markerId)\n\n // Go to the first highlighted line in case it's off screen\n editorRef.current.editor.scrollToLine(from - 3, false, false, () => {})\n }\n }, [from, to])\n\n return (\n
\n
\n
\n \n \"Guardsquare\"\n \n {name}\n
\n \n \n \n \n Open Playground\n \n
\n
\n {\n editor.setHighlightGutterLine(false)\n editor.renderer.$cursorLayer.element.style.display = 'none'\n editor.container.style.lineHeight = 1.7\n editor.renderer.updateFontSize()\n }}\n highlightActiveLine={false}\n highlightSelectedWord={false}\n />\n
\n
\n )\n}\n\nexport default EmbeddedPlayground\n","import React, { useRef } from 'react'\nimport config from '@/Config/config'\nimport { usePage } from '@inertiajs/inertia-react'\n\nconst PlaygroundName = ({ className, onChanged }) => {\n const { id, name } = usePage()\n const text = useRef('')\n\n const onblur = () => {\n const newName = text.current.innerHTML\n if (newName.length > 0 && newName !== name) {\n fetch(`${config.prefix}/p/${id}/name`, {\n method: 'PUT',\n body: JSON.stringify({ name: newName }),\n })\n onChanged()\n } else {\n text.current.innerHTML = name\n }\n }\n\n return (\n
\n {\n // ignore enter\n if (e.keyCode === 13) {\n e.preventDefault()\n }\n }}\n className=\"text-gray-700 px-2 py-1 outline-none border-0 focus:outline-none focus:ring focus:ring-primary-dark rounded-md\"\n contentEditable\n spellCheck={false}\n >\n {name}\n \n
\n )\n}\n\nexport default PlaygroundName\n","import React, { useState } from 'react'\nimport EmbeddedPlayground from './EmbeddedPlayground'\nimport { copyToClipboard } from '@/utils.js'\n\nconst EmbedButton = () => {\n const [isOpen, setIsOpen] = useState(false)\n const embedCode = (highlightLines, from, to) => {\n let fromParam = highlightLines ? '&from=' + from : ''\n let toParam = highlightLines ? '&to=' + to : ''\n return ``\n }\n\n const [highlightLines, setHighlightLines] = useState(false)\n const [from, setFrom] = useState(1)\n const [to, setTo] = useState(1)\n const [copyText, setCopyText] = useState('copy')\n\n return (\n <>\n setIsOpen(true)}\n className=\"group flex text-gray-600 hover:bg-gray-100 focus:outline-none items-center space-x-1 border border-gray-200 rounded px-2 py-1 text-sm disabled:pointer-events-none disabled:text-gray-400\"\n >\n \n \n \n Embed\n \n \n
\n
\n
\n
\n\n \n ​\n \n \n
\n
\n

\n
\n \n \n \n
\n Embed playground\n

\n

\n You can embed ProGuard Playgrounds in an iframe. This is\n useful to integrate your playground in a blog, forum post,\n etc.\n

\n
\n

\n Embed snippet:\n

\n
\n                     {\n                        copyToClipboard(embedCode(highlightLines, from, to))\n                        setCopyText('copied')\n                        setTimeout(() => {\n                          setCopyText('copy')\n                        }, 2000)\n                      }}\n                      className=\"absolute right-0 bottom-0 font-normal text-xs p-1 text-gray-400 hover:text-gray-800 focus:outline-none\"\n                    >\n                      {copyText}\n                    \n                    {embedCode(highlightLines, from, to)}\n                  
\n
\n \n Highlight lines?\n setHighlightLines(e.target.checked)}\n className=\"ml-2 h-4 w-4 rounded border-gray-300 focus:border-primary-dark focus:ring-2 focus:ring-primary-dark focus:ring-opacity-50 text-primary-dark\"\n />\n \n {highlightLines && (\n <>\n \n From:\n \n {\n const v = parseInt(e.target.value)\n setFrom(v)\n if (v > to) {\n setTo(v)\n }\n }}\n className=\"block ml-4 h-8 w-20 rounded border-gray-300 shadow-sm focus:border-primary-dark focus:ring focus:ring-primary-dark focus:ring-opacity-50\"\n />\n \n To:\n \n {\n const v = parseInt(e.target.value)\n setTo(v)\n if (v < from) {\n setFrom(v)\n }\n }}\n className=\"block ml-4 h-8 w-20 rounded border-gray-300 shadow-sm focus:border-primary-dark focus:ring focus:ring-primary-dark focus:ring-opacity-50\"\n />\n \n )}\n
\n
\n
\n
\n \n
\n
\n
\n setIsOpen(false)}\n className=\"w-full inline-flex justify-center rounded-md shadow-sm px-4 py-2 bg-primary-dark text-base font-medium text-white hover:bg-opacity-80 focus:outline-none sm:ml-3 sm:w-auto sm:text-sm\"\n >\n Got it!\n \n
\n
\n
\n \n \n )\n}\n\nexport default EmbedButton\n","import React, { useEffect, useState } from 'react'\nimport Layout from '@/Components/Layout'\nimport Playground from '@/Components/Playground'\nimport EmbeddedPlayground from '@/Components/EmbeddedPlayground'\nimport PlaygroundName from '@/Components/PlaygroundName'\nimport Tooltip from '@/Components/Tooltip'\nimport { Inertia } from '@inertiajs/inertia'\nimport { showFlashMessages, copyToClipboard, toastMsg } from '@/utils.js'\nimport EmbedButton from '@/Components/EmbedButton'\nimport { usePage } from '@inertiajs/inertia-react'\nimport { AddIcon, SupportIcon, ManualIcon } from '@/Components/Icons'\nimport config from '@/Config/config.js'\n\nconst ViewPlayground = ({ id, flash, isCreator, name }) => {\n const params = new URLSearchParams(window.location.search)\n if (params.has('embed')) {\n return (\n \n )\n }\n\n useEffect(() => {\n showFlashMessages(flash)\n }, [flash])\n\n const fork = (e) => {\n e.preventDefault()\n Inertia.post(config.prefix + '/p/' + id + '/fork')\n }\n\n const save = (e) => {\n e.preventDefault()\n Inertia.post(config.prefix + '/p/' + id + '/save')\n }\n\n const copyURL = () => {\n copyToClipboard(document.location)\n toastMsg('The URL was copied to your clipboard.')\n }\n\n const [hasChanges, setHasChanges] = useState(false)\n useEffect(() => {\n setHasChanges(false)\n }, [id])\n const { rules } = usePage()\n\n const headerButtons = (\n
\n
\n
\n {\n setHasChanges(true)\n }}\n />\n {hasChanges ? (\n \n Share\n \n ) : (\n <>\n \n /{id}\n \n \n \n \n \n \n )}\n
\n
\n )\n\n const sidebarButtons = (\n
\n
\n \n Start a new playground\n

\n }\n >\n \n \n \n \n
\n
\n \n ProGuard manual\n

\n }\n >\n \n \n \n \n
\n
\n )\n\n return (\n \n {\n setHasChanges(newRules !== rules)\n }}\n />\n \n )\n}\n\nexport default ViewPlayground\n"],"sourceRoot":""}