react-toolkits 0.3.44 → 0.3.45
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/CHANGELOG.md +6 -0
- package/lib/index.css +1 -1
- package/lib/index.css.map +1 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@7.2.0_postcss@8.4.27_typescript@5.1.6/node_modules/tsup/assets/esm_shims.js","../src/components/ContextProvider/index.tsx","../src/locales/en_GB.ts","../src/utils/i18n.ts","../src/components/FilterFormWrapper/index.tsx","../src/utils/storage.ts","../src/utils/request.ts","../src/stores/token.ts","../src/components/GameSelect/index.tsx","../src/components/Highlight/index.tsx","../src/hooks/permission.ts","../src/components/PermissionButton/index.tsx","../src/stores/queryList.ts","../src/components/QueryList/index.tsx","../src/hooks/formModal.tsx","../src/constants/index.ts","../src/routes/base/Login/default.tsx","../src/routes/base/Login/index.tsx","../src/routes/base/NotFound/index.tsx","../src/features/permission/hooks/index.ts","../src/features/permission/components/PermissionCollapse/index.tsx","../src/features/permission/components/PermissionListV1/index.tsx","../src/features/permission/components/PermissionListV2/index.tsx","../src/features/permission/components/PermissionList/index.tsx","../src/features/permission/types/index.ts","../src/features/permission/index.ts","../src/routes/permission/UserList/index.tsx","../src/routes/permission/RoleList/index.tsx","../src/routes/permission/RoleDetail/index.tsx","../src/index.ts","../src/components/DynamicTags/index.tsx","../src/components/Layout/index.tsx","../src/components/NavMenu/index.tsx","../src/components/NavMenu/store.ts","../src/components/UserWidget/index.tsx","../src/components/RequireGame/index.tsx","../src/components/PermissionGuard/index.tsx","../src/routes/base/index.tsx","../src/routes/permission/index.tsx"],"names":["init_esm_shims","__esmMin","createContext","useContext","create","useStore","jsx","useToolkitsContext","ToolkitsContext","defaultState","contextStore","ContextProvider","ContextProvider_default","init_ContextProvider","_a","_b","children","props","__objRest","parentConfig","config","__spreadValues","locale","en_GB_default","init_en_GB","get","has","template","useTranslation","key","data","init_i18n","Button","Space","theme","jsxs","FilterFormWrapper","FilterFormWrapper_default","init_FilterFormWrapper","confirmText","extras","onConfirm","onReset","token","t","formStyle","item","mixedStorage","init_storage","name","value","__async","pick","qs","request","url","opts","body","params","headers","responseType","isGlobalNS","rest","parsed","queryParams","options","queryString","useTokenStore","game","useGameStore","__spreadProps","response","RequestError","commonResponse","json","init_request","init_GameSelect","init_token","persist","jwtDecode","useNavigate","useEffect","useState","useSWRImmutable","useValidateToken","navigate","clearToken","validated","setValidated","usePermissionApiV2","err","set","store","_","state","Select","Typography","useCallback","useMemo","createJSONStorage","useSWRConfig","useGames","user","isLoading","Text","GameSelect","GameSelect_default","gameFilter","setGame","games","mutate","clearCache","onGameChange","id","matchGame","flushSync","createRoot","renderToString","node","container","root","resolve","splitByTags","Highlight","Highlight_default","init_Highlight","str","regex","part","texts","htmlString","setHtmlString","result","text","index","useSWR","usePermissions","codes","isValidating","acc","curr","usePermission","code","init_permission","Tooltip","PermissionButton","PermissionButton_default","init_PermissionButton","showLoading","restProps","accessible","useQueryListStore","init_queryList","payload","_c","keyMap","paginationMap","swrKey","page","size","Form","Result","Spin","Table","forwardRef","useImperativeHandle","useRef","QueryListAction","fallbackData","InternalQueryList","QueryList","QueryList_default","init_QueryList","ref","noPagination","extra","renderForm","transformArg","transformResponse","afterSuccess","tableProps","form","action","formValues","setFormValues","isValid","setIsValid","setResponse","_mutate","args","refreshInterval","isDataLoading","isDataValidating","_response","list","onPaginationChange","currentPage","currentSize","pagination","refetch","values","Modal","useFormModal","content","onCancel","modal","contextHolder","defaultProps","scopedProps","initialValues","extraValues","restScopedProps","onOk","init_formModal","SSO_URL","init_constants","Default","default_default","init_default","Login_exports","__export","Login_default","AliyunOutlined","Alert","Card","Col","Divider","Row","Navigate","useLocation","useSearchParams","Title","Login","init_Login","searchParams","location","setToken","localeDropdownMenu","NotFound_exports","NotFound_default","NotFound","init_NotFound","useSWRMutation","useAllPermissions","useAllPermissionsV2","useAllRoles","useRole","useCreateRole","arg","useUpdateRole","useRemoveRole","useCreateUser","useUpdateUser","useRemoveUser","init_hooks","Checkbox","Collapse","PermissionCollapse","PermissionCollapse_default","init_PermissionCollapse","permissions","readonly","expand","onChange","activeKey","setActiveKey","checkedMap","setCheckedMap","internalValue","setInternalValue","onCollapseChange","getCheckedValue","checkedValue","tempValue","onCheckChange","e","category","permission","Skeleton","PermissionListV1","PermissionListV1_default","init_PermissionListV1","error","Empty","Option","PermissionListV2","PermissionListV2_default","init_PermissionListV2","gameList","setGameList","globalPermissions","gamePermissions","addGame","prev","removeGame","i","newValue","selectedValue","pev","temp","gameId","Fragment","PermissionList","PermissionList_default","init_PermissionList","init_types","UserList_exports","UserList_default","UserAddOutlined","App","Input","Tag","produce","Link","useCreatingUserModal","message","roles","role","useUpdatingUserModal","update","draft","match","UserList","init_UserList","remove","showCreatingModal","creatingContextHolder","showUpdatingModal","updatingContextHolder","columns","List","Total","RoleList_exports","RoleList_default","UsergroupAddOutlined","useUpdatingRoleModal","RoleList","init_RoleList","_form","viewable","RoleDetail_exports","RoleDetail_default","Breadcrumb","Descriptions","useParams","RoleDetail","init_RoleDetail","PlusOutlined","DynamicTags","initialTags","addable","removable","addCallback","removeCallback","tags","setTags","inputVisible","setInputVisible","inputValue","setInputValue","editInputIndex","setEditInputIndex","editInputValue","setEditInputValue","inputRef","editInputRef","handleClose","removedTag","newTags","tag","showInput","handleInputChange","handleInputConfirm","handleEditInputChange","handleEditInputConfirm","tagInputStyle","tagPlusStyle","DynamicTags_default","Antd","Suspense","logo","Menu","useNavStore","keys","withLink","label","route","transformItems","items","isPass","flatItems","keypath","_keys","NavMenu","menuItems","flattenItems","internalItems","openKeys","selectedKeys","setOpenKeys","setSelectedKeys","onOpenChange","latestOpenKey","NavMenu_default","Dropdown","LogoutOutlined","UserOutlined","UserWidget","getUser","UserWidget_default","RequireGame","hideGameSelect","RequireGame_default","Header","Sider","Content","Layout","colorBgContainer","colorBorder","title","Layout_default","PermissionGuard","PermissionGuard_default","lazy","routes","base_default","permission_default"],"mappings":"m5BAAA,IAAAA,EAAAC,EAAA,oBCIA,OAAS,iBAAAC,GAAe,cAAAC,OAAkB,QAC1C,OAAS,UAAAC,GAAQ,YAAAC,OAAgB,UA4CxB,cAAAC,OAAA,oBAdF,SAASC,GAAqB,CACnC,OAAOJ,GAAWK,EAAe,CACnC,CArCA,IAkBMC,GAQOC,GAEPF,GAWAG,GAeCC,GAtDPC,EAAAZ,EAAA,kBAAAD,IAkBMS,GAA6B,CACjC,MAAO,GACP,UAAW,CAAC,EACZ,eAAgB,GAChB,mBAAoB,EACtB,EAGaC,GAAeN,GAAqB,IAAMK,EAAY,EAE7DD,GAAkBN,GAA4BO,EAAY,EAW1DE,GAAiEG,GAA2B,CAA3B,IAAAC,EAAAD,EAAE,UAAAE,CAvCzE,EAuCuED,EAAeE,EAAAC,EAAfH,EAAe,CAAb,aACvE,IAAMI,EAAeZ,EAAmB,EAElCa,EAASC,IAAA,GACVF,GACAF,GAGL,OAAAP,GAAa,SAASU,CAAM,EAErBd,GAACE,GAAgB,SAAhB,CAAyB,MAAOY,EAAS,SAAAJ,EAAS,CAC5D,EAEAL,GAAgB,YAAc,0BAEvBC,GAAQD,KCtDf,IAEMW,GAwECC,GA1EPC,GAAAvB,EAAA,kBAAAD,IAEMsB,GAAiB,CACrB,cAAe,mDACf,KAAM,OACN,aAAc,gBACd,UAAW,YACX,OAAQ,SACR,KAAM,OACN,OAAQ,SACR,UAAW,aACX,KAAM,OACN,KAAM,OACN,KAAM,OACN,MAAO,CACL,MAAO,eACP,WAAY,oBACZ,eAAgB,cAChB,cAAe,8EACjB,EACA,SAAU,CACR,SAAU,sCACV,WAAY,gBACd,EACA,kBAAmB,CACjB,YAAa,SACb,UAAW,OACb,EACA,UAAW,CACT,YAAa,UACb,WAAY,QACd,EACA,WAAY,CACV,MAAO,eACP,YAAa,sBACf,EACA,YAAa,CACX,YAAa,sBACf,EACA,WAAY,CACV,WAAY,QACd,EACA,SAAU,CACR,YAAa,cACb,mBAAoB,4BACpB,YAAa,cACb,mBAAoB,4BACpB,YAAa,cACb,cAAe,oDACf,mBAAoB,2BACtB,EACA,SAAU,CACR,YAAa,cACb,mBAAoB,4BACpB,YAAa,cACb,mBAAoB,4BACpB,YAAa,cACb,cAAe,oDACf,mBAAoB,2BACtB,EACA,eAAgB,CACd,kBAAmB,gCACnB,iBAAkB,6BAClB,iBAAkB,mBAClB,uBAAwB,6BACxB,sBAAuB,6BACvB,WAAY,SACZ,QAAS,sBACX,EACA,WAAY,CACV,MAAO,cACT,CACF,EAEOC,GAAQD,KCvEf,OAAS,OAAAG,GAAK,OAAAC,GAAK,YAAAC,OAAgB,YAiB5B,SAASC,GAAiB,CAC/B,GAAM,CAAE,OAAAN,EAASC,EAAM,EAAIhB,EAAmB,EAE9C,MAAO,CAACsB,EAAoBC,IAC1BJ,GAAIJ,EAAQO,CAAG,EAAIF,GAASF,GAAIH,EAAQO,CAAa,CAAC,EAAEC,CAAI,EAAID,CACpE,CAzBA,IAAAE,EAAA9B,EAAA,kBAAAD,IACAwB,KACAX,MCDA,OAAS,UAAAmB,GAAQ,SAAAC,GAAO,SAAAC,OAAa,OA8B7B,cAAA5B,GAEE,QAAA6B,OAFF,oBA/BR,IAYMC,GAoCCC,GAhDPC,GAAArC,EAAA,kBAAAD,IAGA+B,IASMK,GAAqBnB,GAAkC,CAC3D,GAAM,CAAE,YAAAsB,EAAa,OAAAC,EAAQ,UAAAC,EAAW,QAAAC,EAAS,SAAA1B,CAAS,EAAIC,EACxD,CAAE,MAAA0B,CAAM,EAAIT,GAAM,SAAS,EAC3BU,EAAIhB,EAAe,EAEnBiB,EAAY,CAChB,SAAU,OACV,WAAYF,EAAM,eAClB,YAAaA,EAAM,UACnB,YAAaA,EAAM,SACnB,YAAaA,EAAM,YACnB,aAAcA,EAAM,eACpB,QAAS,GACT,aAAc,EAChB,EAEA,OACErC,GAAC,OAAI,MAAOuC,EACV,SAAAV,GAAC,OAAI,UAAU,OACb,UAAA7B,GAAC,OAAI,UAAU,SAAU,SAAAU,EAAS,EAClCV,GAAC,OAAI,UAAU,OACb,SAAA6B,GAACF,GAAA,CACC,UAAA3B,GAAC0B,GAAA,CAAO,KAAK,UAAU,QAASS,EAC7B,SAAAF,GAAeK,EAAE,+BAA+B,EACnD,EACAtC,GAAC0B,GAAA,CAAO,SAAS,QAAQ,QAASU,EAC/B,SAAAE,EAAE,6BAA6B,EAClC,EACCJ,GAAA,YAAAA,EAAQ,IAAIM,GAAQxC,GAAC,QAAqB,SAAAwC,EAAK,UAAhBA,EAAK,GAAoB,IAC3D,EACF,GACF,EACF,CAEJ,EAEOT,GAAQD,KChDf,IAGaW,GAHbC,GAAA/C,EAAA,kBAAAD,IAGa+C,GAA6B,CACxC,QAAUE,GACD,eAAe,QAAQA,CAAI,GAAK,aAAa,QAAQA,CAAI,EAElE,QAAS,CAACA,EAAcC,IAAkB,CACxC,eAAe,QAAQD,EAAMC,CAAK,EAClC,aAAa,QAAQD,EAAMC,CAAK,CAClC,EACA,WAAmBD,GAAiBE,EAAA,wBAClC,eAAe,WAAWF,CAAI,EAC9B,aAAa,WAAWA,CAAI,CAC9B,EACF,ICXA,OAAS,QAAAG,OAAY,YAErB,OAAOC,OAAQ,eAkCf,SAAsBC,EAAiBC,EAAaC,EAAoD,QAAAL,EAAA,sBACtG,IAA4ErC,EAAA0C,GAAA,KAAAA,EAAQ,CAAC,EAA/E,MAAAC,EAAM,OAAAC,EAAQ,QAAAC,EAAS,aAAAC,EAAe,OAAQ,WAAAC,CAzCtD,EAyC8E/C,EAATgD,EAAA5C,EAASJ,EAAT,CAA7D,OAAM,SAAQ,UAAS,eAAuB,eAE9CiD,EAASV,GAAG,SAASE,CAAG,EACxBS,EAAc,OAAO,OAAO,CAAC,EAAGD,EAAO,MAAOL,CAAM,EACpDO,EAA4B,CAChC,SAAU,GACV,gBAAiB,GACjB,OAAQ,GACR,OAAQ,EACV,EACMC,EAAcb,GAAG,UAAUW,EAAaC,CAAO,EACrDV,EAAMW,EAAc,GAAGH,EAAO,GAAG,IAAIG,CAAW,GAAKX,EAGrDI,EAAU,IAAI,QAAQA,CAAO,EAC7B,IAAMhB,EAAQwB,EAAc,SAAS,EAAE,MAGvC,GAFAR,EAAQ,IAAI,gBAAiB,UAAUhB,CAAK,EAAE,EAE1CjC,GAAa,SAAS,EAAE,mBAAoB,CAC9C,IAAM0D,EAAOC,GAAa,SAAS,EAAE,KAEjCR,EACFF,EAAQ,IAAI,SAAU,QAAQ,EACrBS,GACTT,EAAQ,IAAI,SAAUS,EAAK,EAAE,CAEjC,CAEIR,IAAiB,OACnBD,EAAQ,OAAO,SAAU,0BAA0B,EAEnDA,EAAQ,OAAO,SAAU,kBAAkB,EAG7C,IAAMvC,EAASkD,EAAAjD,EAAA,GACVyC,GADU,CAEb,QAAAH,EACA,KAAMF,IAAS,MAAQA,aAAgB,SAAWA,EAAO,KAAK,UAAUA,CAAI,CAC9E,GAEMc,EAAW,MAAM,MAAMhB,EAAKnC,CAAM,EAExC,GAAI,CAACmD,EAAS,GACZ,MAAM,IAAIC,GAAa,CAAE,OAAQD,EAAS,MAAO,CAAC,EAGpD,IAAME,EAAiBrB,GAAKmB,EAAU,CAAC,UAAW,SAAU,aAAc,KAAK,CAAC,EAEhF,GAAIX,IAAiB,OAAQ,CAC3B,IAAM9B,EAAQ,MAAMyC,EAAS,KAAK,EAClC,OAAOD,EAAAjD,EAAA,GACFoD,GADE,CAEL,KAAA3C,CACF,EACF,CAEA,IAAM4C,EAAQ,MAAMH,EAAS,KAAK,EAElC,GAAIG,EAAK,OAAS,GAAKA,EAAK,SAAW,EACrC,OAAOJ,EAAAjD,EAAA,GAAKoD,GAAL,CAAqB,KAAMC,EAAK,IAAK,GAG9C,MAAM,IAAIF,GAAa,CAAE,OAAQD,EAAS,OAAQ,QAASG,EAAK,GAAI,CAAC,CACvE,GAxGA,IAQaF,GARbG,EAAA1E,EAAA,kBAAAD,IACAa,IACA+D,KACAC,KAKaL,GAAN,cAA2B,KAAM,CAGtC,YAAYhB,EAA8C,CACxD,MAAMA,GAAA,YAAAA,EAAM,OAAO,EACnB,KAAK,OAASA,GAAA,YAAAA,EAAM,MACtB,CACF,ICfA,OAAS,UAAApD,OAAc,UACvB,OAAS,WAAA0E,OAAe,qBACxB,OAAOC,OAAe,aACtB,OAAS,eAAAC,OAAmB,mBAC5B,OAAS,aAAAC,GAAW,YAAAC,OAAgB,QACpC,OAAOC,OAAqB,gBAyCrB,SAASC,IAAmB,CACjC,IAAMC,EAAWL,GAAY,EACvB,CAAE,WAAAM,CAAW,EAAInB,EAAc,EAC/B,CAACoB,EAAWC,CAAY,EAAIN,GAAS,EAAK,EAC1C,CAAE,mBAAAO,CAAmB,EAAIlF,EAAmB,EAGlD4E,GACE,CAACI,GAAa,SAAS,WAAa,SAChCE,EACE,4BACA,0BACF,KACHlC,GACCD,EAAQC,EAAK,CACX,OAAQ,OACR,KAAM,CAAE,YAAa,CAAC,QAAQ,CAAE,CAClC,CAAC,EACH,CACE,SAAU,GACV,mBAAoB,GACpB,QAAQmC,EAAmB,CACrBA,EAAI,SAAW,KACjBJ,EAAW,EACXD,EAAS,QAAQ,GACRK,EAAI,SAAW,MACxBJ,EAAW,EACXD,EAAS,SAAU,CAAE,MAAO,CAAE,QAAS,EAAK,CAAE,CAAC,EAEnD,CACF,CACF,EAEAJ,GAAU,IAAM,CACdO,EAAa,EAAI,CACnB,EAAG,CAAC,CAAC,CACP,CAlFA,IAsBarB,EAtBbU,GAAA5E,EAAA,kBAAAD,IAOA2E,IACA9D,IAcasD,EAAgB/D,GAAmB,EAC9C0E,GACE,CAACa,EAAKlE,EAAKmE,KAAW,CACpB,MAAO,GACP,QAAS,IAAM,CACb,GAAI,CACF,OAAOb,GAAUtD,EAAI,EAAE,KAAK,CAC9B,OAASoE,EAAG,CACV,OAAO,IACT,CACF,EACA,SAAUlD,GAASgD,EAAI,CAAE,MAAAhD,CAAM,CAAC,EAChC,WAAY,IAAM,CAChBlB,EAAI,EAAE,SAAS,EAAE,EACjBmE,EAAM,QAAQ,aAAa,CAC7B,CACF,GACA,CACE,KAAM,QACN,WAAYE,IAAU,CAAE,MAAOA,EAAM,KAAM,EAC7C,CACF,CACF,IC5CA,OAAS,UAAAC,GAAQ,SAAA9D,GAAO,cAAA+D,OAAkB,OAC1C,OAAS,eAAAC,GAAa,aAAAhB,GAAW,WAAAiB,OAAe,QAChD,OAAOf,OAAqB,gBAC5B,OAAS,UAAA/E,OAAc,UACvB,OAAS,qBAAA+F,GAAmB,WAAArB,OAAe,qBAM3C,OAAS,gBAAAsB,OAAoB,MAuFzB,OACE,OAAA9F,GADF,QAAA6B,OAAA,oBAzDJ,SAASkE,IAAW,CAClB,GAAM,CAAE,mBAAAZ,CAAmB,EAAIlF,EAAmB,EAC5C+F,EAAOnC,EAAc2B,GAASA,EAAM,QAAQ,CAAC,EAE7C,CAAE,KAAAhE,EAAM,UAAAyE,CAAU,EAAIpB,GAC1BM,GAAsBa,EAAO,8BAA8BA,EAAK,WAAW,GAAK,KAChF/C,GAAOD,EAAgBC,EAAK,CAAE,WAAY,EAAK,CAAC,EAAE,KAAKgB,GAAYA,EAAS,IAAI,CAClF,EAEA,MAAO,CACL,MAAOzC,EACP,UAAAyE,CACF,CACF,CArDA,IAYQC,GAcKnC,GA6BPoC,GA0DCC,GAjHP9B,GAAA3E,EAAA,kBAAAD,IAKAgD,KACAjB,IACAlB,IACAgE,KACAF,KAGM,CAAE,KAAA6B,IAASR,IAcJ3B,GAAejE,GAAkB,EAC5C0E,GACEa,IAAQ,CACN,KAAM,KACN,QAASvB,GAAQuB,EAAI,CAAE,KAAAvB,CAAK,CAAC,CAC/B,GACA,CACE,KAAM,OACN,QAAS+B,GAAkB,IAAMpD,EAAY,EAC7C,WAAY+C,IAAU,CAAE,KAAMA,EAAM,IAAK,EAC3C,CACF,CACF,EAiBMW,GAAa,IAAM,CACvB,IAAM7D,EAAIhB,EAAe,EACnB,CAAE,WAAA+E,CAAW,EAAIpG,EAAmB,EACpC,CAAE,KAAA6D,EAAM,QAAAwC,CAAQ,EAAIvC,GAAa,EACjC,CAAE,MAAAwC,EAAO,UAAAN,CAAU,EAAIF,GAAS,EAChC,CAAE,OAAAS,CAAO,EAAIV,GAAa,EAE1BnC,EAAUiC,GACd,IAAG,CA/DP,IAAApF,EAAAC,EAgEO,OAAAA,GAAAD,EAAA+F,GAAA,KAAAA,EAAS,CAAC,IAAV,YAAA/F,EACG,OAAOgC,GAAQ,CAAC6D,GAAcA,EAAW7D,CAAI,KADhD,YAAA/B,EAEG,IAAI+B,IAAS,CACb,MAAOA,EAAK,KACZ,MAAOA,EAAK,EACd,KACJ,CAAC+D,EAAOF,CAAU,CACpB,EAEMI,EAAad,GAAY,IAAM,CACnCa,EAAOjF,GACE,EAAE,OAAOA,GAAQ,UAAYA,EAAI,WAAW,uBAAuB,EAC3E,CACH,EAAG,CAACiF,CAAM,CAAC,EAELE,EAAef,GACZgB,GAAe9D,EAAA,wBACpB,IAAM+D,GAAaL,GAAA,KAAAA,EAAS,CAAC,GAAG,KAAK/D,GAAQA,EAAK,KAAOmE,CAAE,EACvDC,IACFN,EAAQM,CAAS,EACjBH,EAAW,EAEf,GACA,CAACF,EAAOD,EAASG,CAAU,CAC7B,EAEA,OAAA9B,GAAU,IAAM,CACV,CAACsB,IAActC,EAAQ,SAAW,GAAK,CAACA,EAAQ,KAAKnB,GAAQA,EAAK,SAAUsB,GAAA,YAAAA,EAAM,GAAE,IACtFwC,EAAQ,IAAI,CAEhB,EAAG,CAACL,EAAWnC,EAAMH,EAAS2C,CAAO,CAAC,EAGpCzE,GAACF,GAAA,CACC,UAAA3B,GAACkG,GAAA,CAAM,SAAA5D,EAAE,kBAAkB,EAAE,EAC7BtC,GAACyF,GAAA,CACC,WAAU,GACV,iBAAiB,QACjB,MAAO3B,GAAA,YAAAA,EAAM,GACb,YAAaxB,EAAE,wBAAwB,EACvC,QAAS2D,EACT,MAAO,CAAE,MAAO,OAAQ,EACxB,QAAStC,EACT,SAAU+C,EACZ,GACF,CAEJ,EAEON,GAAQD,KChHf,OAAS,aAAAxB,GAAW,YAAAC,OAAgB,QACpC,OAAS,aAAAiC,OAAiB,YAC1B,OAAS,cAAAC,OAAkB,mBA4ClB,cAAA9G,OAAA,oBArCT,SAAS+G,GAAeC,EAAkC,CACxD,IAAMC,EAAY,SAAS,cAAc,KAAK,EACxCC,EAAOJ,GAAWG,CAAS,EAEjC,OAAO,IAAI,QAAQE,GAAW,CAC5B,WAAW,IAAM,CACfN,GAAU,IAAM,CACdK,EAAK,OAAOF,CAAI,CAClB,CAAC,EACDG,EAAQF,EAAU,SAAS,CAC7B,CAAC,CACH,CAAC,CACH,CAtBA,IAKMG,GAuBAC,GAsBCC,GAlDPC,GAAA5H,EAAA,kBAAAD,IAKM0H,GAAeI,GAAgB,CACnC,IAAMC,EAAQ,YACd,OAAOD,EAAI,MAAMC,CAAK,EAAE,OAAOC,GAAQA,IAAS,EAAE,CACpD,EAoBML,GAAa1G,GAA+B,CAChD,GAAM,CAAE,MAAAgH,EAAO,SAAAjH,CAAS,EAAIC,EACtB,CAACiH,EAAYC,CAAa,EAAIjD,GAAiB,EAAE,EAEvD,OAAAD,GAAU,IAAM,CACdoC,GAAerG,CAAQ,EAAE,KAAK8G,GAAO,CACnC,IAAMM,EAASV,GAAYI,CAAG,EAE9B,QAAWO,KAAQJ,EACjB,QAASK,EAAQ,EAAGA,EAAQF,EAAO,OAAQE,IAEzCF,EAAOE,CAAK,EAAIF,EAAOE,CAAK,EAAE,QAAQ,OAAOD,CAAI,EAAG,iCAAiCA,CAAI,SAAS,EAItGF,EAAcC,EAAO,KAAK,EAAE,CAAC,CAC/B,CAAC,CACH,EAAG,CAACpH,EAAUiH,CAAK,CAAC,EAEb3H,GAAC,KAAE,wBAAyB,CAAE,OAAQ4H,CAAW,EAAG,CAC7D,EAEON,GAAQD,KChDf,OAAOY,OAAY,MAQZ,SAASC,GACdC,EACAjF,EAIA,CACA,GAAM,CAAE,mBAAAiC,CAAmB,EAAIlF,EAAmB,EAE5C,CAAE,KAAAuB,EAAM,aAAA4G,EAAc,UAAAnC,CAAU,EAAIgC,GACxCE,EAAM,OAAS,EAAI,CAAChD,EAAqB,4BAA8B,0BAA2BgD,CAAK,EAAI,KAC3G,CAAC,CAAClF,CAAG,IACHD,EAA+BC,EAAK,CAClC,OAAQ,OACR,KAAM,CACJ,YAAakF,CACf,EACA,WAAYjF,GAAA,YAAAA,EAAM,UACpB,CAAC,EAAE,KAAKe,GACFA,EAAS,KAAK,QACTkE,EAAM,OACX,CAACE,EAAKC,KACJD,EAAIC,CAAI,EAAI,GACLD,GAET,CAAC,CACH,EAGKF,EAAM,OACX,CAACE,EAAKC,KACJD,EAAIC,CAAI,EAAKrE,EAAS,KAAiCqE,CAAI,EACpDD,GAET,CAAC,CACH,CACD,EACH,CACE,SAAUnF,GAAA,YAAAA,EAAM,SAChB,mBAAoB,EACtB,CACF,EAEA,MAAO,CAAE,KAAA1B,EAAM,aAAA4G,EAAc,UAAAnC,CAAU,CACzC,CAEO,SAASsC,EACdC,EACAtF,EAIA,CA9DF,IAAA1C,EA+DE,GAAM,CAAE,KAAAgB,EAAM,aAAA4G,EAAc,UAAAnC,CAAU,EAAIiC,GAAeM,EAAO,CAACA,CAAI,EAAI,CAAC,EAAGtF,CAAI,EAEjF,OAAIsF,IAAS,OACJ,CACL,WAAY,GACZ,aAAc,GACd,UAAW,EACb,EAGK,CACL,YAAYhI,EAAAgB,GAAA,YAAAA,EAAOgH,KAAP,KAAAhI,EAAgB,GAC5B,aAAA4H,EACA,UAAAnC,CACF,CACF,CA9EA,IAAAwC,EAAA9I,EAAA,kBAAAD,IAAAa,IACA8D,MCAA,OAAS,UAAA3C,GAAQ,WAAAgH,OAAe,OAkB1B,cAAA1I,OAAA,oBAnBN,IAYM2I,GA0BCC,EAtCPC,GAAAlJ,EAAA,kBAAAD,IAGA+B,IACAgH,IAQME,GAAiEhI,GAAS,CAC9E,IAAkEH,EAAAG,EAA1D,UAAAD,EAAU,KAAA8H,EAAM,YAAAM,EAAa,WAAAvF,CAbvC,EAaoE/C,EAAduI,EAAAnI,EAAcJ,EAAd,CAA5C,WAAU,OAAM,cAAa,eAC/B,CAAE,WAAAwI,EAAY,UAAA/C,CAAU,EAAIsC,EAAcC,EAAM,CAAE,WAAAjF,CAAW,CAAC,EAC9DjB,EAAIhB,EAAe,EAEzB,OAAI2E,EAEAjG,GAAC0B,GAAAsC,EAAAjD,EAAA,CAAO,QAAS+H,EAAa,SAAU,CAACA,GAAiBC,GAAzD,CACE,SAAArI,GACH,EAICsI,EAUEhJ,GAAC0B,GAAAsC,EAAAjD,EAAA,GAAWgI,GAAX,CAAuB,SAAArI,GAAS,EARpCV,GAAC0I,GAAA,CAAQ,YAAa,GAAO,MAAOpG,EAAE,eAAe,EACnD,SAAAtC,GAAC0B,GAAAsC,EAAAjD,EAAA,CAAO,SAAQ,IAAKgI,GAApB,CACE,SAAArI,GACH,EACF,CAKN,EAEOkI,EAAQD,KCpCf,OAAS,UAAAnC,OAAc,MAEvB,OAAS,UAAA1G,OAAc,UAJvB,IAmBamJ,EAnBbC,GAAAvJ,EAAA,kBAAAD,IAmBauJ,EAAoBnJ,GAAuB,CAACuF,EAAKlE,KAAS,CACrE,OAAQ,IAAI,IACZ,cAAe,IAAI,IACnB,OAAQ,CAACI,EAAK4H,EAAS3H,EAAM0B,IAAS,CAtBxC,IAAA1C,EAAAC,EAAA2I,EAuBI,GAAM,CAAE,OAAAC,EAAQ,cAAAC,CAAc,EAAInI,EAAI,EAChCoI,EAASF,EAAO,IAAI9H,CAAG,EACvB,CAAE,KAAAiI,EAAO,EAAG,KAAAC,EAAO,EAAG,GAAIjJ,EAAA8I,EAAc,IAAI/H,CAAG,IAArB,KAAAf,EAA0B,CAAC,EAEvD,CAAC2I,IAAa,CAACA,EAAQ,MAAQA,EAAQ,OAASK,KAAU,CAACL,EAAQ,MAAQA,EAAQ,OAASM,GAC9FjD,GAAO+C,EAAQ/H,EAAM0B,CAAI,EAEzBmC,EAAI,CACF,cAAe,IAAI,IAAIiE,CAAa,EAAE,IAAI/H,EAAK,CAC7C,MAAMd,EAAA0I,EAAQ,OAAR,KAAA1I,EAAgB+I,EACtB,MAAMJ,EAAAD,EAAQ,OAAR,KAAAC,EAAgBK,CACxB,CAAC,CACH,CAAC,CAEL,CACF,EAAE,IC9BF,OAAS,QAAAC,GAAM,UAAAC,GAAQ,QAAAC,GAAM,SAAAC,OAAa,OAG1C,OAAO9G,OAAQ,eAEf,OAAS,cAAA+G,GAAY,eAAAnE,GAAa,aAAAhB,GAAW,uBAAAoF,GAAqB,UAAAC,GAAQ,YAAApF,OAAgB,QAC1F,OAAOqD,IAAU,gBAAAnC,OAAoB,MAqM/B,cAAA9F,GAgBF,QAAA6B,OAhBE,oBAnNN,IA0BYoI,GAaNC,GAuBAC,GAwLAC,GAQCC,GA9PPC,GAAA3K,EAAA,kBAAAD,IACAsC,KACAyG,IACAS,KAEAzH,IACA4C,IAoBY4F,QACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,KAAO,OACPA,EAAA,KAAO,OAJGA,QAAA,IAaNC,GAAe,CACnB,KAAM,CAAC,EACP,MAAO,CACT,EAoBMC,GAAoB,CAKxBxJ,EACA4J,IACG,CArEL,IAAA9J,GAAA2I,GAsEE,IAaI5I,GAAAG,EAZF,KAAAsC,EACA,KAAAuF,EACA,YAAAvG,EACA,QAAAoB,EACA,WAAAE,EACA,aAAAiH,EACA,MAAAC,EACA,WAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,aAAAC,CAjFJ,EAmFMrK,GADCsK,EAAAlK,EACDJ,GADC,CAXH,MACA,OACA,cACA,UACA,aACA,eACA,QACA,aACA,eACA,oBACA,iBAGI8B,EAAIhB,EAAe,EACnB,CAACyJ,CAAI,EAAIrB,GAAK,QAAgB,EAC9B,CAAE,WAAAV,EAAY,UAAA/C,CAAU,EAAIsC,EAAcC,EAAM,CAAE,WAAAjF,CAAW,CAAC,EAC9DyH,EAAShB,GAAwB,EACjC,CAAE,OAAAxD,EAAQ,cAAA8C,EAAe,OAAAD,CAAO,EAAIJ,EAAkB,EACtD,CAAE,KAAAO,GAAO,EAAG,KAAAC,GAAO,EAAG,GAAIhJ,GAAA6I,EAAc,IAAIrG,CAAG,IAArB,KAAAxC,GAA0B,CAAC,EACrD,CAACwK,GAAYC,CAAa,EAAItG,GAAiB,EAC/C,CAACuG,GAASC,CAAU,EAAIxG,GAAS,EAAK,EACtC,CAACX,GAAUoH,CAAW,EAAIzG,GAAmB,EAE7CxB,IACJgG,GAAAuB,GAAA,YAAAA,EAAenB,GAAMC,GAAMwB,MAA3B,KAAA7B,GACCoB,EACGS,GACAjH,EAAAjD,EAAA,GACKkK,IADL,CAEE,KAAAzB,GACA,KAAAC,EACF,GAEA6B,GAAU3F,GACd,IAAI4F,IAAoF/E,EAAOvD,EAAK,GAAGsI,CAAI,EAC3G,CAAC/E,EAAQvD,CAAG,CACd,EAEMQ,GAASV,GAAG,SAASE,CAAG,EACxBS,GAAc,OAAO,OAAO,CAAC,EAAGD,GAAO,MAAOL,EAAM,EACpDQ,GAAcb,GAAG,UAAUW,EAAW,EACtC6F,GAAS4B,GAAU,GAAG1H,GAAO,GAAG,IAAIG,EAAW,GAAK,KACpD,CAAE,gBAAA4H,EAAgB,EAAI1F,GAAa,EAEnC,CACJ,KAAAtE,GACA,UAAWiK,GACX,aAAcC,EAChB,EAAIzD,GACFsB,GACMhI,GAAOsB,EAAA,wBAzHjB,IAAArC,GA0HM,IAAMmL,EAAY,MAAM3I,EAAkBzB,EAAK,CAAE,QAAA8B,EAAS,WAAAE,CAAW,CAAC,EACtE8H,EAAYM,EAAU,IAAI,EAC1B,IAAMC,IAAOpL,GAAAoK,GAAA,YAAAA,EAAoBe,EAAU,QAA9B,KAAAnL,GAAuCmL,EAAU,KAC9D,OAAAd,GAAA,MAAAA,EAAee,GAAMZ,EAAO,SAC5BA,EAAO,QAAU,OACVY,EACT,GACA,CACE,mBAAoB,GACpB,aAAA1B,EACF,CACF,EAEM2B,GAAqB,CAAOC,EAAqBC,IAAwBlJ,EAAA,wBAC7EmI,EAAO,QAAU,OACjBM,GAAQ,CAAE,KAAMQ,EAAa,KAAMC,CAAY,CAAC,CAClD,GAEMC,GAAaxB,EACf,GACA,CACE,gBAAiB,GACjB,gBAAiB,GACjB,QAAShB,GACT,SAAUC,GACV,MAAOjI,IAAA,YAAAA,GAAM,MACb,SAAUqK,EACZ,EAEE1J,GAAY,IAAYU,EAAA,wBAC5BmI,EAAO,QAAU,UACjBE,EAAcH,EAAK,eAAe,CAAC,EAEnC,GAAI,CACF,MAAMA,EAAK,eAAe,EAC1BO,GAAQ,CAAE,KAAM,CAAE,EAAG,OAAW,CAAE,WAAY,EAAK,CAAC,EACpDF,EAAW,EAAI,CACjB,OAAS7F,EAAG,CACV+F,GAAQ,CAAE,KAAM,CAAE,EAAG,OAAW,CAAE,WAAY,EAAM,CAAC,EACrDF,EAAW,EAAK,CAClB,CACF,GAEMa,GAAU,IAAYpJ,EAAA,wBAC1BkI,EAAK,YAAY,EACjBG,EAAcH,EAAK,eAAe,CAAC,EAEnC,GAAI,CACF,MAAMA,EAAK,eAAe,EAC1BO,GAAQ,CAAE,KAAM,CAAE,EAAG,OAAW,CAAE,WAAY,EAAK,CAAC,EACpDF,EAAW,EAAI,CACjB,OAAS7F,EAAG,CACVwF,EAAK,YAAY,EACjBO,GAAQ,CAAE,KAAM,CAAE,EAAG,OAAW,CAAE,WAAY,EAAM,CAAC,EACrDF,EAAW,EAAK,CAClB,CACF,GAEMhJ,GAAU,IAAM,CACpB4I,EAAO,QAAU,QACjBiB,GAAQ,CACV,EA0BA,OAxBAtH,GAAU,IAAM,CACVqE,IACFgC,EAAO,QAAU,OACjBiB,GAAQ,EAGZ,EAAG,CAACjD,CAAU,CAAC,EAEfrE,GAAU,IAAM,CACd0E,EAAO,IAAIpG,EAAKsG,EAAM,CACxB,EAAG,CAACF,EAAQE,GAAQtG,CAAG,CAAC,EAExB8G,GAAoBQ,EAAK,KAAO,CAC9B,KAAAQ,EACA,cAAe,CAACpI,EAAgBC,IAAe,CAC7CmI,EAAK,cAAcpI,EAAMC,CAAK,EAC9BsI,EAAcH,EAAK,eAAe,CAAC,CACrC,EACA,eAAiBmB,GAAqC,CACpDnB,EAAK,eAAemB,CAAM,EAC1BhB,EAAcH,EAAK,eAAe,CAAC,CACrC,CACF,EAAE,EAEE9E,EAEAjG,GAAC4J,GAAA,CACC,MAAO,CACL,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,OAAQ,GACV,EACF,EAICZ,EAKHnH,GAAC,OACE,UAAA6I,EACC1K,GAAC+B,GAAA,CAAkB,YAAaE,EAAa,QAASG,GAAS,UAAWD,GACvE,SAAAuI,EAAWK,CAAI,EAClB,EAEA/K,GAAC0J,GAAA,CAAK,KAAMqB,EAAM,EAEnBN,GAASzK,GAAC,OAAI,UAAU,OAAQ,SAAAyK,EAAMxG,GAAU8G,CAAI,EAAE,EACvD/K,GAAC6J,GAAA7F,EAAAjD,EAAA,GACK+J,GADL,CAEC,WAAYtJ,IAAA,YAAAA,GAAM,KAClB,QAASgK,KAAoB,EAAIE,GAAmBD,GACpD,WAAYO,IACd,GACF,EAnBOhM,GAAC2J,GAAA,CAAO,OAAQ,IAAK,SAAUrH,EAAE,eAAe,EAAG,CAqB9D,EAEM8H,GAAYN,GAAWK,EAAiB,EAQvCE,GAAQD,KC5Pf,OAAS,QAAAV,GAAM,SAAAyC,OAAa,OAgET,cAAAnM,OAAA,oBA5CZ,SAASoM,EAAqBzL,EAAkC,CACrE,IAAuDH,EAAAG,EAA/C,WAAAwB,EAAW,QAAAkK,EAAS,SAAAC,CAvB9B,EAuByD9L,EAAduI,EAAAnI,EAAcJ,EAAd,CAAjC,YAAW,UAAS,aACtB,CAAC+L,EAAOC,CAAa,EAAIL,GAAM,SAAS,EACxC,CAACpB,CAAI,EAAIrB,GAAK,QAAgB,EAE9B+C,EAA+BzI,EAAAjD,EAAA,GAChCgI,GADgC,CAEnC,KAAM,KACN,UAAW,iBACX,QAASsD,GAAA,YAAAA,EAAUtB,EACrB,GA+BA,MAAO,CACL,KA7BA2B,GAMG,CACH,IAA2DlM,EAAAkM,GAAA,KAAAA,EAAe,CAAC,EAAnE,eAAAC,EAAe,YAAAC,CA1C3B,EA0C+DpM,EAApBqM,EAAAjM,EAAoBJ,EAApB,CAA/B,gBAAe,gBAEnBmM,GACF5B,EAAK,eAAe4B,CAAa,EAGnC,IAAMG,EAAO,IAAYjK,EAAA,sBACvB,IAAMqJ,EAAS,MAAMnB,EAAK,eAAe,EACzC,MAAM5I,GAAA,YAAAA,EAAY+J,EAAQnB,EAAM6B,EAClC,GAEA,OAAOL,EAAM,QAAQvI,EAAAjD,IAAA,GAChB0L,GACAI,GAFgB,CAGnB,KAAAC,EACA,UAAW,CACTR,GAAA,MAAAA,EAAWvB,EACb,CACF,EAAC,CACH,EAIE,KAAAA,EACA,cAAe/K,GAAC,OAAK,SAAAwM,EAAc,CACrC,CACF,CApEA,IAAAO,GAAApN,EAAA,kBAAAD,MCAA,IAAasN,GAAbC,GAAAtN,EAAA,kBAAAD,IAAasN,GAAU,4ECKjB,cAAAhN,EAQM,QAAA6B,MARN,oBALN,IAEMqL,GA61BCC,GA/1BPC,GAAAzN,EAAA,kBAAAD,IAEMwN,GAAc,IAEhBrL,EAAC,OAAI,QAAQ,gBAAgB,MAAM,6BACjC,UAAA7B,EAAC,KAAE,GAAG,IAAI,EACVA,EAAC,KAAE,GAAG,IACJ,SAAAA,EAAC,KAAE,GAAG,IACJ,SAAA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,oaACH,EACD6B,EAAC,KAAE,QAAQ,KACT,UAAA7B,EAAC,KAAE,QAAQ,KACT,SAAAA,EAAC,QACC,KAAK,UACL,EAAE,6HACH,EACH,EACAA,EAAC,KAAE,QAAQ,KACT,SAAAA,EAAC,QACC,KAAK,UACL,EAAE,iJACH,EACH,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,+hBACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,mIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6GACH,GACH,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,gjBACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,yIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0GACH,GACH,GACF,EACA6B,EAAC,KACC,UAAAA,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,kiBACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,mIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,sGACH,GACH,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,mhBACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,0HACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wGACH,GACH,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,giBACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,6HACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,yGACH,GACH,GACF,EACAA,EAAC,QACC,KAAK,UACL,EAAE,0FACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uFACH,EACDA,EAAC,QAAK,KAAK,UAAU,OAAO,OAAO,MAAM,SAAS,EAAE,SAAS,EAAE,QAAQ,GACzE,EACAA,EAAC,QACC,KAAK,UACL,EAAE,8JACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,2aACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,sGACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,QACC,KAAK,UACL,UAAU,wCACV,OAAO,OACP,MAAM,SACN,EAAE,UACF,EAAE,SACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,sFACR,EACDA,EAAC,KAAE,QAAQ,KACT,SAAAA,EAAC,QACC,KAAK,UACL,EAAE,6LACH,EACH,EACAA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6UACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,kMACR,EACDA,EAAC,WAAQ,KAAK,UAAU,OAAO,0DAA0D,EACzF6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,gTACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0WACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,qNACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0RACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,4NACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,iFACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,8IACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6TACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,sKACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,4LACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,kmBACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6EACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,2FACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oHACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,yGACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0FACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,6NACH,EACD6B,EAAC,KACC,UAAAA,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,iEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,iEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,2EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,iEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,2EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,GACF,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,iUACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wTACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,yVACH,GACH,GACF,EACAA,EAAC,WACC,KAAK,UACL,OAAO,yEACR,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,oIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oIACH,GACH,EACAA,EAAC,QACC,KAAK,UACL,EAAE,6JACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,kfACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6JACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,yGACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,OACL,OAAO,wEACR,EACDA,EAAC,WACC,KAAK,OACL,OAAO,qEACR,EACDA,EAAC,QACC,KAAK,OACL,EAAE,2HACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,kIACH,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,OACL,OAAO,qEACR,EACDA,EAAC,WAAQ,KAAK,OAAO,OAAO,kEAAkE,EAC9FA,EAAC,QACC,KAAK,OACL,EAAE,gIACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,wHACH,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,OACL,OAAO,uEACR,EACDA,EAAC,WACC,KAAK,OACL,OAAO,uEACR,EACDA,EAAC,QACC,KAAK,OACL,EAAE,oIACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,uIACH,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,qKACH,EACD6B,EAAC,KACC,UAAAA,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACD6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6FACH,GACH,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,8FACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,8FACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,qEACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,GACH,GACF,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,wLACH,EACDA,EAAC,QAAK,KAAK,UAAU,OAAO,MAAM,MAAM,QAAQ,EAAE,SAAS,EAAE,SAAS,EACtEA,EAAC,QAAK,KAAK,UAAU,OAAO,MAAM,MAAM,QAAQ,EAAE,SAAS,EAAE,QAAQ,EACrEA,EAAC,QAAK,KAAK,UAAU,OAAO,MAAM,MAAM,QAAQ,EAAE,SAAS,EAAE,SAAS,EACtEA,EAAC,QACC,KAAK,OACL,EAAE,gFACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,mGACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,kEACR,EACDA,EAAC,WAAQ,KAAK,UAAU,OAAO,iEAAiE,EAChG6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,gFACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,4HACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,uEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,sEACR,GACH,EACAA,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,0PACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uKACH,GACH,EACAA,EAAC,WACC,KAAK,UACL,OAAO,0JACR,GACH,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,oVACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,mLACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,2EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,2EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,EACAA,EAAC,QACC,KAAK,UACL,EAAE,kJACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,kJACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,kJACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,yNACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,gSACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0VACH,GACH,GACF,GACF,EACA6B,EAAC,KACC,UAAAA,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,mdACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,2WACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,sTACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,+NACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0LACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uVACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wQACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,yKACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,iFACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,8JACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wHACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oSACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uHACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,+KACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oKACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,yNACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,mFACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,mFACH,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0GACH,GACH,GACF,EACAA,EAAC,WACC,KAAK,OACL,OAAO,uEACR,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,oMACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6IACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wNACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,sMACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uMACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,iLACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,+YACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,mIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,2IACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,kKACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0GACH,EACD6B,EAAC,KACC,UAAAA,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,6GACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,mIACH,EACDA,EAAC,WACC,KAAK,OACL,OAAO,wEACR,GACH,EACAA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,4HACH,GACH,EACAA,EAAC,QACC,KAAK,UACL,EAAE,0LACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,+QACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,gGACH,EACDA,EAA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","sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Game } from '@/components/GameSelect'\nimport type { Locale } from '@/locales'\nimport type { FC, PropsWithChildren, ReactNode } from 'react'\nimport { createContext, useContext } from 'react'\nimport { create, useStore } from 'zustand'\nimport type { NavMenuItem } from '../NavMenu'\n\nexport interface ContextState {\n title: string\n menuItems: NavMenuItem[]\n hideGameSelect: boolean\n usePermissionApiV2: boolean // 使用 V2 版本的权限接口\n gameFilter?: (game: Game) => boolean\n locale?: Locale\n localeDropdownMenu?: ReactNode\n}\n\nconst defaultState: ContextState = {\n title: '',\n menuItems: [],\n hideGameSelect: false,\n usePermissionApiV2: false,\n}\n\n// 全局的上下文。因为 ContextProvider 支持嵌套,所以 toolkitContextStore 的值等同于最内层的 ContextProvider 包含的上下文。\nexport const contextStore = create<ContextState>(() => defaultState)\n\nconst ToolkitsContext = createContext<ContextState>(defaultState)\n\nexport function useContextStore<T>(selector: (state: ContextState) => T): T {\n return useStore(contextStore, selector)\n}\n\n// 最接近的祖先 ContextProvider 内包含的上下文。\nexport function useToolkitsContext() {\n return useContext(ToolkitsContext)\n}\n\nconst ContextProvider: FC<PropsWithChildren<Partial<ContextState>>> = ({ children, ...props }) => {\n const parentConfig = useToolkitsContext()\n\n const config = {\n ...parentConfig,\n ...props,\n }\n\n contextStore.setState(config)\n\n return <ToolkitsContext.Provider value={config}>{children}</ToolkitsContext.Provider>\n}\n\nContextProvider.displayName = 'ToolkitsContextProvider'\n\nexport default ContextProvider\n","import type { Locale } from '@/locales'\n\nconst locale: Locale = {\n noEntitlement: 'No permission, please contact the administrator.',\n name: 'Name',\n creationTime: 'Creation Time',\n operation: 'Operation',\n update: 'Update',\n edit: 'Edit',\n delete: 'Delete',\n selectAll: 'Select All',\n game: 'Game',\n user: 'User',\n role: 'Role',\n Login: {\n title: 'Login Method',\n thirdParty: 'Third Party Login',\n loginWithIDass: 'IDass Login',\n notRegistered: 'You are not yet registered on the platform, please contact the administrator',\n },\n NotFound: {\n subTitle: 'The page you visited does not exist',\n buttonText: 'Return to page',\n },\n FilterFormWrapper: {\n confirmText: 'Search',\n resetText: 'Reset',\n },\n FormModal: {\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n },\n GameSelect: {\n label: 'Current Game',\n placeholder: 'Please select a game',\n },\n RequireGame: {\n description: 'Please select a game',\n },\n UserWidget: {\n logoutText: 'Logout',\n },\n UserList: {\n createTitle: 'Create User',\n createSuccessfully: 'User created successfully',\n updateTitle: 'Update User',\n updateSuccessfully: 'User updated successfully',\n deleteTitle: 'Delete User',\n deleteContent: 'Are you sure you want to delete user <%= user %>?',\n deleteSuccessfully: 'User deleted successfully',\n },\n RoleList: {\n createTitle: 'Create Role',\n createSuccessfully: 'Role created successfully',\n updateTitle: 'Update Role',\n updateSuccessfully: 'Role updated successfully',\n deleteTitle: 'Delete Role',\n deleteContent: 'Are you sure you want to delete role <%= role %>?',\n deleteSuccessfully: 'Role deleted successfully',\n },\n PermissionList: {\n failedDescription: 'Failed to get permission list',\n baseSectionTitle: 'Platform Basic Permissions',\n gameSectionTitle: 'Game Permissions',\n gameSectionDescription: 'Please select a game first',\n gameSelectPlaceholder: 'Please select a game first',\n removeText: 'Remove',\n addText: 'Add Game Permissions',\n },\n RoleDetail: {\n title: 'Role Details',\n },\n}\n\nexport default locale\n","// eslint-disable-next-line camelcase\nimport en_GB from '@/locales/en_GB'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport { get, has, template } from 'lodash-es'\nimport type { Locale } from '@/locales'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const { locale = en_GB } = useToolkitsContext()\n\n return (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Button, Space, theme } from 'antd'\nimport type { Key, PropsWithChildren, ReactNode } from 'react'\nimport { useTranslation } from '@/utils/i18n'\n\nexport interface FilterFormWrapperProps extends PropsWithChildren {\n confirmText?: ReactNode\n onConfirm?: () => void | Promise<void>\n onReset?: () => void\n extras?: { key: Key; children: ReactNode }[]\n}\n\nconst FilterFormWrapper = (props: FilterFormWrapperProps) => {\n const { confirmText, extras, onConfirm, onReset, children } = props\n const { token } = theme.useToken()\n const t = useTranslation()\n\n const formStyle = {\n maxWidth: 'none',\n background: token.colorFillAlter,\n borderWidth: token.lineWidth,\n borderStyle: token.lineType,\n borderColor: token.colorBorder,\n borderRadius: token.borderRadiusLG,\n padding: 24,\n marginBottom: 24,\n }\n\n return (\n <div style={formStyle}>\n <div className=\"flex\">\n <div className=\"flex-1\">{children}</div>\n <div className=\"ml-8\">\n <Space>\n <Button type=\"primary\" onClick={onConfirm}>\n {confirmText || t('FilterFormWrapper.confirmText')}\n </Button>\n <Button htmlType=\"reset\" onClick={onReset}>\n {t('FilterFormWrapper.resetText')}\n </Button>\n {extras?.map(item => <span key={item.key}>{item.children}</span>)}\n </Space>\n </div>\n </div>\n </div>\n )\n}\n\nexport default FilterFormWrapper\n","import type { StateStorage } from 'zustand/esm/middleware'\n\n// 通过 SessionStorage 隔离数据,防止多开页面时的数据冲突\nexport const mixedStorage: StateStorage = {\n getItem: (name: string): string | null => {\n return sessionStorage.getItem(name) || localStorage.getItem(name)\n },\n setItem: (name: string, value: string) => {\n sessionStorage.setItem(name, value)\n localStorage.setItem(name, value)\n },\n removeItem: async (name: string) => {\n sessionStorage.removeItem(name)\n localStorage.removeItem(name)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { contextStore } from '@/components/ContextProvider'\nimport { useGameStore } from '@/components/GameSelect'\nimport { useTokenStore } from '@/stores/token'\nimport { pick } from 'lodash-es'\nimport type { StringifyOptions } from 'query-string'\nimport qs from 'query-string'\n\nexport class RequestError extends Error {\n status?: number\n\n constructor(opts?: { message?: string; status?: number }) {\n super(opts?.message)\n this.status = opts?.status\n }\n}\n\ntype JsonResponse<T> = (\n | {\n code: number\n status?: never\n }\n | {\n code?: never\n status: number\n }\n) & {\n data: T\n msg: string\n}\n\ninterface RequestOptions extends Omit<RequestInit, 'body'> {\n body?: Record<string | number, any> | FormData | null\n params?: Record<string | number, any> | URLSearchParams | null\n responseType?: 'json' | 'blob'\n isGlobalNS?: boolean\n}\n\ntype RequestResponse<T> = Pick<Response, 'headers' | 'status' | 'statusText' | 'url'> & { data: T }\n\nexport async function request<T = any>(url: string, opts?: RequestOptions): Promise<RequestResponse<T>> {\n let { body, params, headers, responseType = 'json', isGlobalNS, ...rest } = opts ?? {}\n\n const parsed = qs.parseUrl(url)\n const queryParams = Object.assign({}, parsed.query, params)\n const options: StringifyOptions = {\n skipNull: true,\n skipEmptyString: true,\n strict: true,\n encode: true,\n }\n const queryString = qs.stringify(queryParams, options)\n url = queryString ? `${parsed.url}?${queryString}` : url\n\n // 设置请求头\n headers = new Headers(headers)\n const token = useTokenStore.getState().token\n headers.set('Authorization', `Bearer ${token}`)\n\n if (contextStore.getState().usePermissionApiV2) {\n const game = useGameStore.getState().game\n\n if (isGlobalNS) {\n headers.set('App-ID', 'global')\n } else if (game) {\n headers.set('App-ID', game.id)\n }\n }\n\n if (responseType === 'blob') {\n headers.append('Accept', 'application/octet-stream')\n } else {\n headers.append('Accept', 'application/json')\n }\n\n const config = {\n ...rest,\n headers,\n body: body === null || body instanceof FormData ? body : JSON.stringify(body),\n }\n\n const response = await fetch(url, config)\n\n if (!response.ok) {\n throw new RequestError({ status: response.status })\n }\n\n const commonResponse = pick(response, ['headers', 'status', 'statusText', 'url'])\n\n if (responseType === 'blob') {\n const data = (await response.blob()) as T\n return {\n ...commonResponse,\n data,\n }\n }\n\n const json = (await response.json()) as JsonResponse<T>\n\n if (json.code === 0 || json.status === 0) {\n return { ...commonResponse, data: json.data }\n }\n\n throw new RequestError({ status: response.status, message: json.msg })\n}\n","import { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport jwtDecode from 'jwt-decode'\nimport { useNavigate } from 'react-router-dom'\nimport { useEffect, useState } from 'react'\nimport useSWRImmutable from 'swr/immutable'\nimport type { RequestError } from '@/utils/request'\nimport { request } from '@/utils/request'\nimport { useToolkitsContext } from '@/components/ContextProvider'\n\ninterface UserInfo {\n authorityId: string\n exp: number\n}\n\nexport interface TokenState {\n token: string\n getUser: () => UserInfo | null\n setToken: (token: string) => void\n clearToken: () => void\n}\n\nexport const useTokenStore = create<TokenState>()(\n persist(\n (set, get, store) => ({\n token: '',\n getUser: () => {\n try {\n return jwtDecode(get().token) as UserInfo\n } catch (_) {\n return null\n }\n },\n setToken: token => set({ token }),\n clearToken: () => {\n get().setToken('')\n store.persist.clearStorage()\n },\n }),\n {\n name: 'token',\n partialize: state => ({ token: state.token }),\n },\n ),\n)\n\nexport function useValidateToken() {\n const navigate = useNavigate()\n const { clearToken } = useTokenStore()\n const [validated, setValidated] = useState(false)\n const { usePermissionApiV2 } = useToolkitsContext()\n\n // 发送请求验证 token 是否有效,无效则跳转到登录页。\n useSWRImmutable(\n !validated && location.pathname !== '/login'\n ? usePermissionApiV2\n ? '/api/usystem/user/checkV2'\n : '/api/usystem/user/check'\n : null,\n (url: string) =>\n request(url, {\n method: 'post',\n body: { permissions: ['100001'] },\n }),\n {\n suspense: true,\n shouldRetryOnError: false,\n onError(err: RequestError) {\n if (err.status === 401) {\n clearToken()\n navigate('/login')\n } else if (err.status === 412) {\n clearToken()\n navigate('/login', { state: { notUser: true } })\n }\n },\n },\n )\n\n useEffect(() => {\n setValidated(true)\n }, [])\n}\n","import { Select, Space, Typography } from 'antd'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport useSWRImmutable from 'swr/immutable'\nimport { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport { mixedStorage } from '@/utils/storage'\nimport { useTranslation } from '@/utils/i18n'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport { useTokenStore } from '@/stores/token'\nimport { request } from '@/utils/request'\nimport { useSWRConfig } from 'swr'\n\nconst { Text } = Typography\n\nexport interface Game {\n id: string\n name: string\n area: 'cn' | 'global'\n Ctime: string\n}\n\nexport interface GameState {\n game: Game | null\n setGame: (game: Game | null) => void\n}\n\nexport const useGameStore = create<GameState>()(\n persist(\n set => ({\n game: null,\n setGame: game => set({ game }),\n }),\n {\n name: 'game',\n storage: createJSONStorage(() => mixedStorage),\n partialize: state => ({ game: state.game }),\n },\n ),\n)\n\nfunction useGames() {\n const { usePermissionApiV2 } = useToolkitsContext()\n const user = useTokenStore(state => state.getUser())\n\n const { data, isLoading } = useSWRImmutable(\n usePermissionApiV2 && user ? `/api/usystem/game/all?user=${user.authorityId}` : null,\n url => request<Game[]>(url, { isGlobalNS: true }).then(response => response.data),\n )\n\n return {\n games: data,\n isLoading,\n }\n}\n\nconst GameSelect = () => {\n const t = useTranslation()\n const { gameFilter } = useToolkitsContext()\n const { game, setGame } = useGameStore()\n const { games, isLoading } = useGames()\n const { mutate } = useSWRConfig()\n\n const options = useMemo(\n () =>\n (games ?? [])\n ?.filter(item => !gameFilter || gameFilter(item))\n ?.map(item => ({\n label: item.name,\n value: item.id,\n })),\n [games, gameFilter],\n )\n\n const clearCache = useCallback(() => {\n mutate(key => {\n return !(typeof key === 'string' && key.startsWith('/api/usystem/game/all'))\n })\n }, [mutate])\n\n const onGameChange = useCallback(\n async (id: string) => {\n const matchGame = (games ?? []).find(item => item.id === id)\n if (matchGame) {\n setGame(matchGame)\n clearCache()\n }\n },\n [games, setGame, clearCache],\n )\n\n useEffect(() => {\n if (!isLoading && (options.length === 0 || !options.some(item => item.value === game?.id))) {\n setGame(null)\n }\n }, [isLoading, game, options, setGame])\n\n return (\n <Space>\n <Text>{t('GameSelect.label')}</Text>\n <Select\n showSearch\n optionFilterProp=\"label\"\n value={game?.id}\n placeholder={t('GameSelect.placeholder')}\n loading={isLoading}\n style={{ width: '200px' }}\n options={options}\n onChange={onGameChange}\n />\n </Space>\n )\n}\n\nexport default GameSelect\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\n\nconst splitByTags = (str: string) => {\n const regex = /(<[^>]*>)/\n return str.split(regex).filter(part => part !== '')\n}\n\nfunction renderToString(node: ReactNode): Promise<string> {\n const container = document.createElement('div')\n const root = createRoot(container)\n\n return new Promise(resolve => {\n setTimeout(() => {\n flushSync(() => {\n root.render(node)\n })\n resolve(container.innerHTML)\n })\n })\n}\n\nexport interface HighlightTextsProps extends PropsWithChildren {\n texts: Array<string | number>\n}\n\nconst Highlight = (props: HighlightTextsProps) => {\n const { texts, children } = props\n const [htmlString, setHtmlString] = useState<string>('')\n\n useEffect(() => {\n renderToString(children).then(str => {\n const result = splitByTags(str)\n\n for (const text of texts) {\n for (let index = 0; index < result.length; index++) {\n // TODO: 忽略 HTML tag\n result[index] = result[index].replace(String(text), `<span style='color: #DC143C;'>${text}</span>`)\n }\n }\n\n setHtmlString(result.join(''))\n })\n }, [children, texts])\n\n return <p dangerouslySetInnerHTML={{ __html: htmlString }}></p>\n}\n\nexport default Highlight\n","import { useToolkitsContext } from '@/components/ContextProvider'\nimport { request } from '@/utils/request'\nimport useSWR from 'swr'\n\ntype PermissionCheckResult =\n | { has_all: true }\n | {\n [k: string]: boolean\n }\n\nexport function usePermissions(\n codes: string[],\n opts?: {\n isGlobalNS?: boolean\n suspense?: boolean\n },\n) {\n const { usePermissionApiV2 } = useToolkitsContext()\n\n const { data, isValidating, isLoading } = useSWR(\n codes.length > 0 ? [usePermissionApiV2 ? '/api/usystem/user/checkV2' : '/api/usystem/user/check', codes] : null,\n ([url]) =>\n request<PermissionCheckResult>(url, {\n method: 'post',\n body: {\n permissions: codes,\n },\n isGlobalNS: opts?.isGlobalNS,\n }).then(response => {\n if (response.data.has_all) {\n return codes.reduce(\n (acc, curr) => {\n acc[curr] = true\n return acc\n },\n {} as Record<string, boolean>,\n )\n }\n\n return codes.reduce(\n (acc, curr) => {\n acc[curr] = (response.data as Record<string, boolean>)[curr]\n return acc\n },\n {} as Record<string, boolean>,\n )\n }),\n {\n suspense: opts?.suspense,\n shouldRetryOnError: false,\n },\n )\n\n return { data, isValidating, isLoading }\n}\n\nexport function usePermission(\n code: string | undefined,\n opts?: {\n isGlobalNS?: boolean\n suspense?: boolean\n },\n) {\n const { data, isValidating, isLoading } = usePermissions(code ? [code] : [], opts)\n\n if (code === undefined) {\n return {\n accessible: true,\n isValidating: false,\n isLoading: false,\n }\n }\n\n return {\n accessible: data?.[code] ?? false,\n isValidating,\n isLoading,\n }\n}\n","import type { ButtonProps } from 'antd'\nimport { Button, Tooltip } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { useTranslation } from '@/utils/i18n'\nimport { usePermission } from '@/hooks/permission'\n\nexport interface PermissionButtonProps extends Omit<ButtonProps, 'disabled'> {\n code: string\n showLoading?: boolean\n isGlobalNS?: boolean\n}\n\nconst PermissionButton: FC<PropsWithChildren<PermissionButtonProps>> = props => {\n const { children, code, showLoading, isGlobalNS, ...restProps } = props\n const { accessible, isLoading } = usePermission(code, { isGlobalNS })\n const t = useTranslation()\n\n if (isLoading) {\n return (\n <Button loading={showLoading} disabled={!showLoading} {...restProps}>\n {children}\n </Button>\n )\n }\n\n if (!accessible) {\n return (\n <Tooltip defaultOpen={false} title={t('noEntitlement')}>\n <Button disabled {...restProps}>\n {children}\n </Button>\n </Tooltip>\n )\n }\n\n return <Button {...restProps}>{children}</Button>\n}\n\nexport default PermissionButton\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ListResponse } from '@/types'\nimport { mutate } from 'swr'\nimport type { MutatorCallback, MutatorOptions } from 'swr/_internal'\nimport { create } from 'zustand'\n\ntype QueryListMutator = <T = any>(\n key: string,\n payload?: Partial<{ page: number; size: number }>,\n data?: ListResponse<T> | Promise<ListResponse<T>> | MutatorCallback<ListResponse<T>>,\n opts?: MutatorOptions<ListResponse<T>>,\n) => void\n\nexport interface QueryListState {\n keyMap: Map<string, string | null>\n paginationMap: Map<string, { page: number; size: number }>\n mutate: QueryListMutator\n}\n\nexport const useQueryListStore = create<QueryListState>((set, get) => ({\n keyMap: new Map(),\n paginationMap: new Map(),\n mutate: (key, payload, data, opts) => {\n const { keyMap, paginationMap } = get()\n const swrKey = keyMap.get(key)\n const { page = 1, size = 10 } = paginationMap.get(key) ?? {}\n\n if (!payload || ((!payload.page || payload.page === page) && (!payload.size || payload.size === size))) {\n mutate(swrKey, data, opts)\n } else {\n set({\n paginationMap: new Map(paginationMap).set(key, {\n page: payload.page ?? page,\n size: payload.size ?? size,\n }),\n })\n }\n },\n}))\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport FilterFormWrapper from '@/components/FilterFormWrapper'\nimport { usePermission } from '@/hooks/permission'\nimport { useQueryListStore } from '@/stores/queryList'\nimport type { ListResponse } from '@/types'\nimport { useTranslation } from '@/utils/i18n'\nimport { request } from '@/utils/request'\nimport type { FormInstance } from 'antd'\nimport { Form, Result, Spin, Table } from 'antd'\nimport type { NamePath } from 'antd/es/form/interface'\nimport type { TableProps } from 'antd/es/table'\nimport qs from 'query-string'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react'\nimport useSWR, { useSWRConfig } from 'swr'\n\ntype RecursivePartial<T> = NonNullable<T> extends object\n ? {\n [P in keyof T]?: NonNullable<T[P]> extends (infer U)[]\n ? RecursivePartial<U>[]\n : NonNullable<T[P]> extends object\n ? RecursivePartial<T[P]>\n : T[P]\n }\n : T\n\nexport enum QueryListAction {\n Confirm = 'confirm',\n Reset = 'reset',\n Jump = 'jump',\n Init = 'init',\n}\n\nexport interface QueryListRef<Values = any> {\n form: FormInstance<Values>\n setFieldValue: (name: NamePath, value: any) => void\n setFieldsValue: (values: RecursivePartial<Values>) => void\n}\n\nconst fallbackData = {\n list: [],\n total: 0,\n}\n\nexport interface QueryListProps<Item = any, Values = any, Response = any>\n extends Pick<TableProps<Item>, 'columns' | 'rowKey' | 'tableLayout' | 'expandable' | 'rowSelection' | 'bordered'> {\n url: string\n renderForm?: (form: FormInstance<Values>) => ReactNode\n code?: string\n isGlobalNS?: boolean\n headers?: Record<string, string>\n // 把表单的值和分页数据转换成请求参数\n transformArg?: (page: number, size: number, values: Values | undefined) => unknown\n // 当请求的返回值不满足时进行转换\n transformResponse?: (response: Response) => ListResponse<Item>\n afterSuccess?: (response: ListResponse<Item>, action?: QueryListAction) => void\n confirmText?: ReactNode\n // 不分页\n noPagination?: boolean\n extra?: (response: Response | undefined, form: FormInstance<Values>) => ReactNode\n}\n\nconst InternalQueryList = <\n Item extends object,\n Values extends object | undefined,\n Response extends ListResponse<Item> = ListResponse<Item>,\n>(\n props: QueryListProps<Item, Values, Response>,\n ref: Ref<QueryListRef<Values>>,\n) => {\n const {\n url,\n code,\n confirmText,\n headers,\n isGlobalNS,\n noPagination,\n extra,\n renderForm,\n transformArg,\n transformResponse,\n afterSuccess,\n ...tableProps\n } = props\n const t = useTranslation()\n const [form] = Form.useForm<Values>()\n const { accessible, isLoading } = usePermission(code, { isGlobalNS })\n const action = useRef<QueryListAction>()\n const { mutate, paginationMap, keyMap } = useQueryListStore()\n const { page = 1, size = 10 } = paginationMap.get(url) ?? {}\n const [formValues, setFormValues] = useState<Values>()\n const [isValid, setIsValid] = useState(false)\n const [response, setResponse] = useState<Response>()\n\n const params =\n transformArg?.(page, size, formValues) ??\n (noPagination\n ? formValues\n : {\n ...formValues,\n page,\n size,\n })\n\n const _mutate = useCallback(\n (...args: Parameters<typeof mutate> extends [infer _, ...infer Rest] ? Rest : never) => mutate(url, ...args),\n [mutate, url],\n )\n\n const parsed = qs.parseUrl(url)\n const queryParams = Object.assign({}, parsed.query, params)\n const queryString = qs.stringify(queryParams)\n const swrKey = isValid ? `${parsed.url}?${queryString}` : null\n const { refreshInterval } = useSWRConfig()\n\n const {\n data,\n isLoading: isDataLoading,\n isValidating: isDataValidating,\n } = useSWR(\n swrKey,\n async key => {\n const _response = await request<Response>(key, { headers, isGlobalNS })\n setResponse(_response.data)\n const list = transformResponse?.(_response.data) ?? _response.data\n afterSuccess?.(list, action.current)\n action.current = undefined\n return list\n },\n {\n shouldRetryOnError: false,\n fallbackData,\n },\n )\n\n const onPaginationChange = async (currentPage: number, currentSize: number) => {\n action.current = QueryListAction.Jump\n _mutate({ page: currentPage, size: currentSize })\n }\n\n const pagination = noPagination\n ? false\n : {\n showSizeChanger: true,\n showQuickJumper: true,\n current: page,\n pageSize: size,\n total: data?.total,\n onChange: onPaginationChange,\n }\n\n const onConfirm = async () => {\n action.current = QueryListAction.Confirm\n setFormValues(form.getFieldsValue())\n\n try {\n await form.validateFields()\n _mutate({ page: 1 }, undefined, { revalidate: true })\n setIsValid(true)\n } catch (_) {\n _mutate({ page: 1 }, undefined, { revalidate: false })\n setIsValid(false)\n }\n }\n\n const refetch = async () => {\n form.resetFields()\n setFormValues(form.getFieldsValue())\n\n try {\n await form.validateFields()\n _mutate({ page: 1 }, undefined, { revalidate: true })\n setIsValid(true)\n } catch (_) {\n form.resetFields()\n _mutate({ page: 1 }, undefined, { revalidate: false })\n setIsValid(false)\n }\n }\n\n const onReset = () => {\n action.current = QueryListAction.Reset\n refetch()\n }\n\n useEffect(() => {\n if (accessible) {\n action.current = QueryListAction.Init\n refetch()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [accessible])\n\n useEffect(() => {\n keyMap.set(url, swrKey)\n }, [keyMap, swrKey, url])\n\n useImperativeHandle(ref, () => ({\n form,\n setFieldValue: (name: NamePath, value: any) => {\n form.setFieldValue(name, value)\n setFormValues(form.getFieldsValue())\n },\n setFieldsValue: (values: RecursivePartial<Values>) => {\n form.setFieldsValue(values)\n setFormValues(form.getFieldsValue())\n },\n }))\n\n if (isLoading) {\n return (\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n }}\n />\n )\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('noEntitlement')} />\n }\n\n return (\n <div>\n {renderForm ? (\n <FilterFormWrapper confirmText={confirmText} onReset={onReset} onConfirm={onConfirm}>\n {renderForm(form)}\n </FilterFormWrapper>\n ) : (\n <Form form={form} />\n )}\n {extra && <div className=\"my-2\">{extra(response, form)}</div>}\n <Table\n {...tableProps}\n dataSource={data?.list}\n loading={refreshInterval === 0 ? isDataValidating : isDataLoading}\n pagination={pagination}\n />\n </div>\n )\n}\n\nconst QueryList = forwardRef(InternalQueryList) as <\n Item extends object,\n Values extends object | undefined,\n Response = ListResponse<Item>,\n>(\n props: QueryListProps<Item, Values, Response> & { ref?: Ref<QueryListRef<Values>> },\n) => ReactElement\n\nexport default QueryList\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { FormInstance, ModalFuncProps } from 'antd'\nimport { Form, Modal } from 'antd'\nimport type { ReactNode } from 'react'\n\ntype RecursivePartial<T> = NonNullable<T> extends object\n ? {\n [P in keyof T]?: NonNullable<T[P]> extends (infer U)[]\n ? RecursivePartial<U>[]\n : NonNullable<T[P]> extends object\n ? RecursivePartial<T[P]>\n : T[P]\n }\n : T\n\nexport interface UseFormModalProps<Values>\n extends Omit<ModalFuncProps, 'icon' | 'className' | 'content' | 'type' | 'onOk' | 'onCancel'> {\n content?: (form: FormInstance<Values>) => ReactNode\n onConfirm?: (values: Values, form: FormInstance<Values>, extraValues: any) => Promise<void>\n onCancel?: (form: FormInstance<Values>) => void\n}\n\nexport function useFormModal<Values>(props: UseFormModalProps<Values>) {\n const { onConfirm, content, onCancel, ...restProps } = props\n const [modal, contextHolder] = Modal.useModal()\n const [form] = Form.useForm<Values>()\n\n const defaultProps: ModalFuncProps = {\n ...restProps,\n icon: null,\n className: 'toolkits-modal',\n content: content?.(form),\n }\n\n const show = (\n scopedProps?: Partial<\n Pick<UseFormModalProps<Values>, 'title'> & {\n initialValues?: RecursivePartial<Values>\n extraValues?: any\n }\n >,\n ) => {\n const { initialValues, extraValues, ...restScopedProps } = scopedProps ?? {}\n\n if (initialValues) {\n form.setFieldsValue(initialValues)\n }\n\n const onOk = async () => {\n const values = await form.validateFields()\n await onConfirm?.(values, form, extraValues)\n }\n\n return modal.confirm({\n ...defaultProps,\n ...restScopedProps,\n onOk,\n onCancel() {\n onCancel?.(form)\n },\n })\n }\n\n return {\n show,\n form,\n contextHolder: <div>{contextHolder}</div>,\n }\n}\n","export const SSO_URL = 'https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1'\n","import type { FC } from 'react'\n\nconst Default: FC = () => {\n return (\n <svg viewBox=\"0 0 1620 1028\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"a\"></g>\n <g id=\"b\">\n <g id=\"c\">\n <g>\n <path\n fill=\"#e8f2fa\"\n d=\"M1543.84,1025.63c-92.65,0-1442.29,.34-1443.07-2.11l-.13-.31s-.13-.3-.13-.45c-.52-1.23-207.95-345.42,114.53-585.03,126.18-93.75-7.9-155.64,92.44-260.01,115.31-119.94,241.15,12.74,369.38-41.64,22.66-9.6,45.39-25.05,68.15-48.76C797.78,32.37,870.19,6.95,944.96,1.25c143.27-10.86,304.51,50.23,387.71,139.53,16.75,17.98,92.93,111.03,32.88,238.91-37.91,80.74,120.91,157.86,177.35,250.06,143.49,234.42,2.24,392.82,.93,395.87Z\"\n ></path>\n <g opacity=\".5\">\n <g opacity=\".5\">\n <path\n fill=\"#a9c2ff\"\n d=\"M522.98,381s-10.51-89.31-55.62-142.6c-6-7.08-17.47-2.57-17.28,6.76,0,.16,0,.31,.01,.47,.58,15.93,51.09,83.13,72.89,135.37Z\"\n ></path>\n </g>\n <g opacity=\".5\">\n <path\n fill=\"#a9c2ff\"\n d=\"M528.46,406.57s-44.95-111.62-121.74-160.99c-4.68-3.01-11.02-1.92-14.16,2.72-2.04,3.02-2.96,7.73-.67,15.1,6.12,19.63,91.75,85.72,136.57,143.18Z\"\n ></path>\n </g>\n </g>\n <g>\n <path\n fill=\"#73b471\"\n d=\"M1088.4,378.19s-40.25-25.14-19.73-56.1c0,0,16.18-18.86,32.87-23.19,0,0-10.72,47-1.98,48.49,8.75,1.48,8.23-53.25,8.23-53.25,0,0,44.27-19.36,61.23-16.97,0,0-28.81,45.13-19.97,44.38,8.84-.75,40.96-46.29,40.96-46.29,0,0,44.84-6.49,50.9,20.56,6.05,27.05-6.03,39.94-12.69,41.34-6.66,1.4-48.94-.94-48.07,4.68,.87,5.62,29.08,15.74,45.22,11.39,0,0-19.38,43.29-42.36,40.09-22.99-3.2-29.54-17.99-43.78-19.7-14.24-1.71-24.84,1.75-17.85,5.95,6.98,4.2,31.27,2.59,42.4,13.03,11.13,10.43,20.22,16.96-1.39,20.52-21.61,3.56-59.96-.84-66.97-17.88l-7.01-17.04Z\"\n ></path>\n <g>\n <path\n fill=\"#73b471\"\n d=\"M1220.24,303.33s-116.93,33.06-131.84,74.86c0,0-.22,18.97-12.65,40.22l-.34,8.36s13.25-27.92,20-31.54c0,0-24.32-37.87,124.83-91.9Z\"\n ></path>\n <path\n fill=\"#73b471\"\n d=\"M1075.75,418.41s-18.91,26.66-10.13,60.45l4.63-1.05s-2.94-36.94,7.12-55.03c10.06-18.09-1.62-4.37-1.62-4.37Z\"\n ></path>\n </g>\n </g>\n <g>\n <path\n fill=\"#9bd399\"\n d=\"M925.53,377.18s-67.6,6.07-70.13-47.44c0,0,2.69-35.79,18.25-55.28,0,0,27.38,63.45,38.71,57.55,11.32-5.9-35.54-68.47-35.54-68.47,0,0,34.61-60.79,56.16-72.8,0,0,4.97,77.02,14.52,68.48,9.54-8.54,8.04-88.93,8.04-88.93,0,0,46.15-46.48,75.98-20.59,29.83,25.89,26.82,51.24,20.33,58.64-6.49,7.4-57.15,41.49-51.4,47.2,5.75,5.71,46.78-7.17,61.69-26.21,0,0,14.28,66.7-14.89,83.01-29.17,16.31-49.21,4.98-67.06,15.39-17.84,10.41-27.12,23.62-15.53,22.38,11.59-1.24,38.19-24.21,59.83-21.88,21.64,2.33,37.62,1.94,15.74,24.83-21.87,22.89-69.75,51.18-92.22,37.65l-22.48-13.53Z\"\n ></path>\n <g>\n <path\n fill=\"#9bd399\"\n d=\"M1014.06,176.32s-106.69,139.76-88.53,200.87c0,0,15.78,22.04,19.44,57.32l6.67,9.92s-8.34-43.67-3.63-53.71c0,0-60.01-22.45,66.05-214.39Z\"\n ></path>\n <path\n fill=\"#9bd399\"\n d=\"M944.97,434.5s.76,47.15,39.44,78.42l4.44-5.24s-34.61-39.97-38.32-69.55c-3.71-29.58-5.56-3.62-5.56-3.62Z\"\n ></path>\n </g>\n </g>\n <g>\n <g>\n <path\n fill=\"#b6cfff\"\n d=\"M290.34,904.31s-18.93-22.41-1.17-36.64c0,0,12.98-7.97,23.56-7.32,0,0-14.99,25.5-10.14,28.04,4.85,2.54,14.69-29.64,14.69-29.64,0,0,29.53-2.91,39.03,1.73,0,0-25.25,20.96-19.93,22.2,5.32,1.25,32.58-19.32,32.58-19.32,0,0,27.48,4.74,26.02,21.75-1.47,17.01-10.94,22.26-15.1,21.81-4.16-.45-28.51-9.88-29.04-6.42-.53,3.46,14.13,14.77,24.39,15.29,0,0-19.38,21.68-32.26,15.42-12.88-6.26-13.98-16.17-22.01-19.89-8.03-3.72-14.88-3.71-11.57,.08,3.31,3.79,17.84,7.48,22.43,15.72,4.59,8.24,8.71,13.79-4.61,11.76-13.32-2.03-34.98-11.92-35.93-23.25l-.95-11.32Z\"\n ></path>\n <g>\n <path\n fill=\"#b6cfff\"\n d=\"M381.48,885.57s-74.65-2.92-91.14,18.74c0,0-3.65,11.08-14.87,21.16l-1.75,4.83s12.94-13.84,17.56-14.67c0,0-7.24-26.83,90.19-30.06Z\"\n ></path>\n <path\n fill=\"#b6cfff\"\n d=\"M275.48,925.47s-16.02,12.02-17.14,33.5l2.91,.26s5.12-22.21,14.37-30.89c9.25-8.68-.14-2.87-.14-2.87Z\"\n ></path>\n </g>\n </g>\n <g>\n <path\n fill=\"#a9c2ff\"\n d=\"M224.15,876.13s30.12-17.11,16.06-40.33c0,0-11.24-14.26-23.29-17.92,0,0,6.42,34.62,0,35.44-6.43,.81-4.42-39.11-4.42-39.11,0,0-31.72-15.48-44.17-14.26,0,0,19.68,33.81,13.25,33-6.43-.81-28.51-35.03-28.51-35.03,0,0-32.53-6.11-37.75,13.44-5.22,19.55,3.21,29.33,8.03,30.55,4.82,1.22,35.74,.81,34.94,4.89-.8,4.07-21.69,10.59-33.33,6.92,0,0,12.85,32.18,29.72,30.55,16.87-1.63,22.09-12.22,32.53-13.03,10.44-.81,18.07,2.04,12.85,4.89-5.22,2.85-22.89,.93-31.32,8.21-8.43,7.27-15.26,11.75,.4,15.01,15.66,3.26,43.77,1.22,49.39-11l5.62-12.22Z\"\n ></path>\n <g>\n <path\n fill=\"#a9c2ff\"\n d=\"M130.18,817.47s84.33,27.7,93.97,58.66c0,0-.4,13.85,8.03,29.74v6.11s-8.83-20.78-13.65-23.63c0,0,18.87-26.88-88.35-70.88Z\"\n ></path>\n <path\n fill=\"#a9c2ff\"\n d=\"M232.18,905.87s13.01,20.03,5.59,44.42l-3.35-.91s3.25-26.86-3.56-40.37c-6.8-13.51,1.31-3.14,1.31-3.14Z\"\n ></path>\n </g>\n </g>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M272.06,852.53s-39.7-22.55-21.17-53.16c0,0,14.82-18.79,30.7-23.63,0,0-8.47,45.64,0,46.72,8.47,1.07,5.82-51.55,5.82-51.55,0,0,41.82-20.4,58.23-18.79,0,0-25.94,44.57-17.47,43.49,8.47-1.07,37.58-46.18,37.58-46.18,0,0,42.88-8.05,49.76,17.72,6.88,25.77-4.23,38.66-10.59,40.27-6.35,1.61-47.11,1.07-46.05,6.44,1.06,5.37,28.58,13.96,43.94,9.13,0,0-16.94,42.42-39.17,40.27-22.23-2.15-29.11-16.11-42.88-17.18-13.76-1.07-23.82,2.69-16.94,6.44,6.88,3.76,30.17,1.23,41.29,10.82,11.12,9.59,20.12,15.49-.53,19.79-20.64,4.3-57.7,1.61-65.11-14.5l-7.41-16.11Z\"\n ></path>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M395.93,775.21s-111.16,36.51-123.87,77.32c0,0,.53,18.26-10.59,39.2v8.05s11.65-27.39,18-31.14c0,0-24.88-35.44,116.46-93.43Z\"\n ></path>\n <path\n fill=\"#cedfff\"\n d=\"M261.48,891.73s-17.14,26.41-7.37,58.55l4.41-1.2s-4.28-35.41,4.69-53.21c8.97-17.81-1.73-4.14-1.73-4.14Z\"\n ></path>\n </g>\n </g>\n <path\n fill=\"#bbd3ff\"\n d=\"M270.72,1019.99c42.95,0,77.77-35.32,77.77-78.89H192.96c0,43.57,34.82,78.89,77.77,78.89Z\"\n ></path>\n <path\n fill=\"#bbd3ff\"\n d=\"M349.57,1024.01H191.88c0-5.37,4.3-9.73,9.59-9.73h138.49c5.3,0,9.59,4.36,9.59,9.73h0Z\"\n ></path>\n <rect fill=\"#80a1e6\" height=\"2.42\" width=\"159.86\" y=\"941.11\" x=\"190.4\"></rect>\n </g>\n <path\n fill=\"#768cee\"\n d=\"M801.19,578.05l-34.8,419.74s-3.65,25.44,15.01,25.49c30.68,.07,152.69,0,152.69,0,0,0-23.09-5.3-22.81-17.21,.33-14.05,40.67-431.99,40.67-431.99l-150.76,3.97Z\"\n ></path>\n <path\n fill=\"#a9c2ff\"\n d=\"M945.58,1015.66c-6.03,.02-124.16,.22-154.03-.17-13.02-.16-15.3-11.74-15.41-19.24-.05-3.59,.4-6.25,.4-6.25l.9-10.91,2.31-27.81,2.04-24.57,2.62-31.57,2.2-26.64,24.73-298.26,150.76-3.97s-16.99,174.91-29.01,302.22c-1.34,14.19-2.62,27.79-3.8,40.48-.38,4.05-.75,8.02-1.11,11.88-1.11,12.05-2.13,23.11-3.02,32.88-.47,5.15-.9,9.93-1.29,14.31-1.53,17.17-2.43,28.13-2.44,30.22,0,1.22,.1,2.35,.29,3.4,2.47,13.38,21.59,13.98,23.86,13.98Z\"\n ></path>\n <polygon\n fill=\"#a9c2ff\"\n points=\"435.05 349.47 519.82 694.86 531.43 742.16 570.91 903.04 1304.39 903.04 1158.87 349.47 435.05 349.47\"\n ></polygon>\n <polygon\n fill=\"#768cee\"\n points=\"435.05 349.46 423.31 353.44 555.29 915.06 570.91 903.04 435.05 349.46\"\n ></polygon>\n <polygon\n fill=\"#809bf5\"\n points=\"555.29 915.06 1284.26 915.06 1304.39 903.04 570.91 903.04 555.29 915.06\"\n ></polygon>\n <rect\n fill=\"#a9c2ff\"\n transform=\"translate(1780.4 2038.92) rotate(180)\"\n height=\"7.61\"\n width=\"157.83\"\n y=\"1015.66\"\n x=\"811.28\"\n ></rect>\n <polygon\n fill=\"#899bfa\"\n points=\"928.99 915.05 928.18 920.87 779.74 951.29 781.78 926.72 782.75 915.05 928.99 915.05\"\n ></polygon>\n <g opacity=\".5\">\n <path\n fill=\"#899bfa\"\n d=\"M945.58,1015.66c-6.03,.02-124.16,.22-154.03-.17-13.02-.16-15.3-11.74-15.41-19.24l147.73-28.19c-1.53,17.17-2.43,28.13-2.44,30.22,0,1.22,.1,2.35,.29,3.4,2.47,13.38,21.59,13.98,23.86,13.98Z\"\n ></path>\n </g>\n <polygon\n fill=\"#899bfa\"\n points=\"435.05 349.46 1158.87 349.46 1276.31 794.36 544.24 794.36 435.05 349.46\"\n ></polygon>\n <polygon\n fill=\"#5158bf\"\n points=\"1242.18 775.08 564.46 775.08 540.24 677.22 530.87 639.35 527.05 623.91 502.16 523.34 500.87 518.1 487.71 464.94 481.83 441.15 476.81 420.86 472.71 404.31 465.03 373.3 1132.98 373.3 1141.41 404.31 1145.91 420.86 1151.42 441.15 1157.88 464.94 1200.47 621.65 1200.47 621.65 1204.08 634.93 1205.76 641.09 1235.16 749.28 1242.18 775.08\"\n ></polygon>\n <polygon\n fill=\"#5d6cd2\"\n points=\"973.57 757.36 624.87 757.36 605.71 662.1 598.3 632.14 595.28 619.93 575.59 540.37 574.57 536.23 564.16 494.17 559.5 475.35 555.53 459.3 552.29 446.21 546.22 421.68 887.42 421.68 973.57 757.36\"\n ></polygon>\n <polygon fill=\"#899bfa\" points=\"819.24 794.36 571.16 904.34 544.24 794.36 819.24 794.36\"></polygon>\n <g>\n <path\n fill=\"#2a3967\"\n d=\"M1384.19,552.09c.04-.99,.79-11.66,16.82-12.22,0,0-7.88,.95-9.24,4.47,0,0,5.37-4.34,9.74-2.95,4.37,1.4,6.94,9.16,6.96,11.72,.03,2.55-2.4,10.79-5.18,11.49-1.05,.27-2.26,.19-3.36,0,.74,1.17,1.46,2.46,2.15,3.9,6.4,13.32-.2,26.33-5.61,24.89-3.47-.92-4.45,5.09-4.45,5.09l-33.74-27.7s12.39-26.01,25.91-18.69Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M1292.25,718.6c2.82,2.53,10.3-6.16,11.33-7.32,.05-.11,.11-.17,.11-.17l-2.28-6.44s-9.82-.38-11.44,1.27c-1.63,1.65-.81,9.96,2.28,12.65Z\"\n ></path>\n <path\n fill=\"#25468f\"\n d=\"M1372.45,944.42l7.17,2.71s31.12-43.79,34.96-82.31c.68-6.88-.72-21.46-.19-24.57,.25-1.45,.55-3.2,.89-5.21,1.01-5.88,2.4-13.93,4-23.09,3.66-21.09,8.41-48.04,12.09-67.85l-1.93-.63-20.89-6.84-4.32-13.91-15.56-4.15s-3.47,6.9-6.58,39.47c-.57,4.27-1.09,8.98-1.49,14.09-1.21,15.6-1.3,34.94,1.48,57.06,.71,5.66,3.67,27.92,3.33,34.81-1.57,31.49-12.96,80.44-12.96,80.44Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M1380.6,772.11l33.78,68.12c.25-1.45,.55-3.2,.89-5.21,1.01-5.88,2.4-13.93,4-23.09,3.66-21.09,8.41-48.04,12.09-67.85l-1.93-.63-20.89-6.84-4.32-13.91-15.56-4.15s-3.47,6.9-6.58,39.47c-.57,4.27-1.09,8.98-1.49,14.09Z\"\n ></path>\n <path\n fill=\"#25468f\"\n d=\"M1395.46,727.29l.78-6.8c13.1,3.53,48.1-9.86,48.1-9.86,0,0,12.69,11.32,11.03,38.44-.81,13.24-2.3,69.5-3.85,86.15-.56,6.03,3.3,21.56,4.85,25.75,15.23,41.17-2.35,91.87-2.35,91.87l-4.56-1.87s-28.85-106.12-31.83-117.36c-5.63-21.25-10.15-48.9-13.17-70.25-.42,.02-9.01-36.08-9.01-36.08Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M1385.52,648.37c22.52,1.25,17.57-32.81,16.2-32.63-2.76-1.46-7.7-8.55-10.56-20.41l-.97,.46-16.25,7.75s1.73,5.36,3,10.5c.99,4.02,1.71,7.9,1.11,8.98-1.28,.53-2.05,.86-2.05,.86,0,0,0,0,0,.02-.16,.42,3.52,24.15,9.53,24.48Z\"\n ></path>\n <path\n fill=\"#f99352\"\n d=\"M1373.93,603.53s1.73,5.36,3,10.5c9.5-2.69,12.38-12.82,13.25-18.25l-16.25,7.75Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M1371.93,609.21s22.73-5.34,19.23-19.64c-3.49-14.31-2.91-24.63-17.57-21.83-14.66,2.8-16.13,8.97-16.11,14.03,.02,5.06,8.45,28.46,14.45,27.44Z\"\n ></path>\n <path\n fill=\"#2a3967\"\n d=\"M1356.2,573.64c2.44-5.19,5.32-4.91,7.12-3.99,10.68-10.02,21.15-1.83,21.15-1.83,4.03,9.88,12.77,13.92,12.77,13.92,0,0-3.49,3.63-13.61,3.55-3.09-.02-6.2-1.46-9.03-3.45,5.45,5.57,11.85,8.97,11.85,8.97-12.67-2.46-21.16-17.34-22.03-18.92-1.07,1.61-3.13,5.03-3.3,7.92-.23,3.93,1.1,11.55-1.12,11.84,0,0-7.47-10.23-3.8-18Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M1427.51,956.62h36.09s.87-5.58-1.02-9.81c-1.81-4.06-4.64-5.91-3.96-10.82-2.29,2.4-6.03,5.08-11.25,4.37-.64,1.05-4.13,6.68-6.26,8.23-2.36,1.72-12.88,1.11-13.6,8.04Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M1350.02,956.62h36.09s1.35-5.84-1.02-9.81c-2.1-3.52-1.29-5.52,.26-8.43-1.64,.68-3.75,1.3-6.08,1.16-1.8-.1-3.7-.93-5.37-1.91-1.55,1.8-8.2,9.44-10.28,10.96-2.36,1.72-12.88,1.11-13.6,8.04Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M1445.02,667.38c-1.94-6.38-3.95-12.51-5.98-18.16-4.62-12.85-7.56-19.56-10.05-24.76-4.74-9.89-25.93-9.27-25.93-9.27-4.08,14.92-15.3,24.22-15.3,24.22-5.98-3.56-10.43-16.08-10.43-16.08l-13.09,7.06h0s-4.05,2.45-7.58,12.75c-5.25,15.32-13.77,37.08-19.68,43.73-1.38,1.55-5.42,3.9-10.31,6.39h0c-.11,.17-.19,.25-.24,.25,.32,.73,1.74,4.18,4.04,7.69,1.87,2.85,4.32,5.73,7.22,7.21,2.23-1.09,6.25-2.7,7.95-3.76,6.16-3.82,15.33-9.32,22.51-20.93l2,27.29,3.62,49.37c5.57,1.76,10.87,3.13,15.89,4.18,.33-4.14,1.65-9.09,1.65-9.09-.06,2.6,2.94,7.56,4.71,10.27,46.22,7.51,67.88-12.94,67.88-12.94-1.8-18.1-9.58-54.72-18.91-85.41Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M1398.39,612.43s3.84,.26,4.67,2.76c0,0-5.02,20.49-15.29,24.22l10.62-26.97Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M1387.77,639.4s-9.82-17.97-9.78-20.4c0,0-3.73,3.35-3.49,5.85,0,0,8.27,13.43,13.26,14.55Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M1414.09,632.11c-.28,.97-20.31,49.54-38.28,67.44-7.87,7.84,17.2,5.57,17.44,4.12,.24-1.46,20.84-71.56,20.84-71.56Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M1370.8,712.54l1.71,27.4c54.8-12.91,50.2-101.44,50.2-101.44l-27.52,57.64-24.15,16.01s-.09,.14-.25,.39Z\"\n ></path>\n <path\n fill=\"#a9c2ff\"\n d=\"M1326.37,693.41c.01,.06,.04,.09,.07,.09-.02-.04-.03-.08-.04-.1-.04-.09-.05-.09-.03,.01Z\"\n ></path>\n <g>\n <path\n fill=\"#ff912b\"\n d=\"M1353.48,655.68l10.91,49.33c1.74,7.86-4.13,14.22-13.1,14.22h-262c-8.97,0-17.65-6.37-19.39-14.22l-10.91-49.33c-.07-.3-.12-.6-.16-.9-1.13-7.44,4.63-13.32,13.26-13.32h262c8.63,0,16.99,5.88,19.15,13.32,.1,.3,.17,.6,.24,.9Z\"\n ></path>\n <g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1089.87 697 1087.3 697 1080.51 666.3 1083.08 666.3 1089.87 697\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1107.58 678.97 1089.17 678.97 1087.24 670.28 1105.66 670.28 1107.58 678.97\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1116.16 691.42 1091.92 691.42 1090 682.74 1114.24 682.74 1116.16 691.42\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1148.77 697 1146.2 697 1139.41 666.3 1141.98 666.3 1148.77 697\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1152.7 678.97 1134.29 678.97 1132.37 670.28 1150.78 670.28 1152.7 678.97\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1158.37 691.42 1134.13 691.42 1132.21 682.74 1156.45 682.74 1158.37 691.42\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1207.67 697 1205.1 697 1198.31 666.3 1200.88 666.3 1207.67 697\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1197.82 678.97 1179.4 678.97 1177.48 670.28 1195.89 670.28 1197.82 678.97\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1200.57 691.42 1176.33 691.42 1174.41 682.74 1198.65 682.74 1200.57 691.42\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1245.35 668.78 1215.1 668.78 1214.52 666.18 1244.78 666.18 1245.35 668.78\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1228.12 671.23 1232.26 689.91 1223.69 689.91 1219.56 671.23 1228.12 671.23\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1240.4 671.23 1245.84 695.82 1237.28 695.82 1231.84 671.23 1240.4 671.23\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1292.98 682.95 1262.72 682.95 1262.14 680.35 1292.4 680.35 1292.98 682.95\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1272.86 672.31 1276.99 690.99 1268.42 690.99 1264.29 672.31 1272.86 672.31\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1284.48 669.36 1289.92 693.94 1281.35 693.94 1275.91 669.36 1284.48 669.36\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1340.63 697.23 1310.37 697.23 1309.79 694.63 1340.05 694.63 1340.63 697.23\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1317.78 673.28 1321.91 691.96 1313.34 691.96 1309.21 673.28 1317.78 673.28\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1328.74 667.37 1334.18 691.96 1325.62 691.96 1320.18 667.37 1328.74 667.37\"\n ></polygon>\n </g>\n </g>\n </g>\n <g>\n <path\n fill=\"#ffae73\"\n d=\"M1327.16,714.82c2.99-.01,7.7-.22,10.42-1.28,0,0-8.7-.13-6.85-2.92,.34-.51,4.66-.12,9.49-.12,1.98,0,6.88,2.75,6.62,2.88,3.5-.47,6.68-1.16,7.71-1.38,.27-.06,.38-.11,.38-.11l3.09,9.13s-.65,.16-1.79,.38c-2.87,.72-8.79,2.26-14.37,4.46-7.81,3.14-13.55-.76-16.16-3.52-1.65-1.75-2.95-4.07-2.86-5.75,.1-1.84,2.5-1.76,4.32-1.77Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M1348.16,715.52l1.9,7.04s2.39-.44,6.18-1.16c1.14-.22,1.79-.39,1.79-.39,3.04-.6,6.67-1.43,10.63-2.31h.06c6.78-1.65,14.37-3.63,20.77-5.83,.57-.2,1.14-.41,1.69-.61,3.78-1.42-3.53-20.9-6.84-18.47-.88,.65-1.82,1.31-2.8,1.99-5.49,3.78-12.47,7.99-18.67,11.54-3.04,1.76-5.91,3.36-8.3,4.68-3.85,2.14-6.4,3.52-6.4,3.52Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M1381.53,695.79s-.4,13.3,11.88,19.77c14.19-5.2,21.78-26.66,27.64-41.4,.81-2.03,1.57-4.07,2.33-6.05,2.71-7.37,4.88-14.63,6.18-20.91,.81-3.74-14.97-22.61-16.97-18.15-3.09,7.09-6.34,16.28-9.38,25.41-1.68,5.01-3.31,10.01-4.94,14.63-.92,2.8-1.85,5.44-2.71,7.86-1.68,4.62-3.2,8.36-4.55,10.73-.87,1.54-3.36,3.69-6.67,6.11-.88,.65-1.82,1.31-2.8,1.99Z\"\n ></path>\n </g>\n </g>\n <polygon\n fill=\"#3c4aaa\"\n points=\"1141.41 404.31 472.71 404.31 465.03 373.3 1132.98 373.3 1141.41 404.31\"\n ></polygon>\n <g>\n <path\n fill=\"#e8f2fa\"\n d=\"M506.59,389.09c.87,2.78-.86,5.05-3.87,5.07-3.01,.02-6.16-2.22-7.03-4.99-.87-2.78,.86-5.05,3.87-5.07,3.01-.02,6.16,2.21,7.03,4.99Z\"\n ></path>\n <path\n fill=\"#e8f2fa\"\n d=\"M529.14,388.93c.87,2.78-.86,5.05-3.87,5.07-3.01,.02-6.16-2.21-7.03-4.99-.87-2.78,.86-5.05,3.87-5.07,3.01-.02,6.16,2.21,7.03,4.99Z\"\n ></path>\n <path\n fill=\"#e8f2fa\"\n d=\"M551.69,388.77c.87,2.78-.86,5.05-3.87,5.07-3.01,.02-6.16-2.21-7.03-4.99-.87-2.78,.86-5.05,3.87-5.07,3.01-.02,6.16,2.21,7.03,4.99Z\"\n ></path>\n </g>\n <path\n fill=\"#ff912b\"\n d=\"M559.5,475.35s78.71,.3,135.79,44.69c57.08,44.39,48.85,84.22,96.21,94.2,77.61,16.36,29.43-67.66,130.21-58.92l51.86,202.04h-348.7l-26.57-125.21-38.8-156.79Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M809.47,617.1c-5.34,0-11.34-.72-18.11-2.15-26.14-5.51-35.78-20.39-47.98-39.22-10.11-15.61-22.69-35.03-48.52-55.11-16.21-12.61-44.82-29.59-89.01-38.86-26.44-5.54-46.15-5.68-46.35-5.68v-1.46c.2,0,20.06,.14,46.64,5.72,24.54,5.15,60,16.11,89.59,39.13,26.02,20.24,38.68,39.77,48.85,55.47,12.49,19.28,21.51,33.21,47.07,38.59,36.4,7.67,44.63-6.84,54.16-23.64,10.62-18.71,22.66-39.93,75.97-35.3l-.12,1.45c-52.41-4.55-64.2,16.24-74.6,34.58-4.82,8.5-9.38,16.53-17.46,21.49-5.44,3.34-12.02,4.99-20.12,4.99Z\"\n ></path>\n <path\n fill=\"#fc7400\"\n d=\"M577.88,549.18l20.01,80.88,26.98,127.29h348.7l-17.58-66.1s-51.62-29.18-121.62-3.75c-70,25.44-147.49,1.96-152.48-55.25-5.62-64.51-64.06-95.58-104.01-83.08Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M665.98,587.45c-20.04-31.44-57-47.24-87.89-37.57l-.42-1.39c31.49-9.85,69.13,6.2,89.52,38.17l-1.21,.79Z\"\n ></path>\n <g>\n <polygon\n fill=\"#fff\"\n points=\"795.85 620.61 784.52 619.43 785.69 607.94 797.02 609.12 795.85 620.61\"\n ></polygon>\n <polygon\n fill=\"#fff\"\n points=\"892.8 636.61 701.9 596.39 702.28 594.51 893.18 634.73 892.8 636.61\"\n ></polygon>\n <path\n fill=\"#fff\"\n d=\"M698.84,595.11c.19-1.82,1.79-3.15,3.59-2.96,1.8,.19,3.1,1.82,2.92,3.64s-1.79,3.15-3.59,2.96c-1.8-.19-3.1-1.82-2.92-3.64Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M889.74,635.33c.19-1.82,1.79-3.15,3.59-2.96,1.8,.19,3.1,1.82,2.92,3.64-.19,1.82-1.79,3.15-3.59,2.96-1.8-.19-3.1-1.82-2.92-3.64Z\"\n ></path>\n </g>\n <g>\n <polygon\n fill=\"#fff\"\n points=\"656.9 504.31 648.61 496.38 656.42 487.98 664.71 495.9 656.9 504.31\"\n ></polygon>\n <polygon fill=\"#fff\" points=\"687.13 528 622.39 462.58 623.73 461.23 688.46 526.64 687.13 528\"></polygon>\n <path\n fill=\"#fff\"\n d=\"M620.52,459.81c1.14-1.42,3.2-1.64,4.6-.49,1.4,1.15,1.62,3.24,.48,4.67-1.14,1.42-3.2,1.64-4.6,.49-1.4-1.15-1.62-3.24-.48-4.67Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M685.26,525.23c1.14-1.42,3.2-1.64,4.6-.49s1.62,3.24,.48,4.67c-1.14,1.42-3.2,1.64-4.6,.49-1.4-1.15-1.62-3.24-.48-4.67Z\"\n ></path>\n </g>\n <g>\n <polygon\n fill=\"#fff\"\n points=\"882.44 557.53 877.99 568.16 867.5 563.65 871.96 553.01 882.44 557.53\"\n ></polygon>\n <polygon\n fill=\"#fff\"\n points=\"863.91 587.74 862.2 586.94 886.44 533.18 888.16 533.98 863.91 587.74\"\n ></polygon>\n <path\n fill=\"#fff\"\n d=\"M862,590.48c-1.71-.59-2.63-2.47-2.05-4.21,.58-1.74,2.44-2.66,4.15-2.08,1.71,.59,2.63,2.47,2.05,4.21-.58,1.74-2.44,2.66-4.15,2.08Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M886.25,536.72c-1.71-.59-2.63-2.47-2.05-4.21,.58-1.74,2.44-2.66,4.15-2.08,1.71,.59,2.63,2.47,2.05,4.21-.58,1.74-2.44,2.66-4.15,2.08Z\"\n ></path>\n </g>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M933.58,440.32l17.72,74.3c.76,3.18-2.2,5.76-6.61,5.76h-182.3c-4.41,0-8.6-2.58-9.35-5.76l-17.72-74.3c-.76-3.18,2.2-5.76,6.61-5.76h182.3c4.41,0,8.59,2.58,9.35,5.76Z\"\n ></path>\n <g>\n <g>\n <polygon\n fill=\"#25468f\"\n points=\"781.52 483.78 762.12 483.78 757.43 464.1 776.83 464.1 781.52 483.78\"\n ></polygon>\n <polygon\n fill=\"#25468f\"\n points=\"793.57 493.62 774.17 493.62 769.47 473.94 788.88 473.94 793.57 493.62\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#25468f\"\n points=\"826.82 483.78 807.42 483.78 802.72 464.1 822.12 464.1 826.82 483.78\"\n ></polygon>\n <g>\n <polygon\n fill=\"#6b98f6\"\n points=\"838.87 493.62 819.47 493.62 814.77 473.94 834.17 473.94 838.87 493.62\"\n ></polygon>\n <path\n fill=\"#183a76\"\n d=\"M839.9,494.47h-21.06l-5.1-21.36h21.06l5.1,21.36Zm-19.8-1.68h17.75l-4.29-18h-17.75l4.29,18Z\"\n ></path>\n </g>\n </g>\n <g>\n <polygon\n fill=\"#6b98f6\"\n points=\"872.12 483.78 852.71 483.78 848.02 464.1 867.42 464.1 872.12 483.78\"\n ></polygon>\n <path\n fill=\"#25468f\"\n d=\"M873.14,484.62h-21.06l-5.1-21.36h21.06l5.1,21.36Zm-19.8-1.68h17.75l-4.29-18h-17.75l4.29,18Z\"\n ></path>\n <polygon\n fill=\"#6b98f6\"\n points=\"884.16 493.62 864.76 493.62 860.07 473.94 879.47 473.94 884.16 493.62\"\n ></polygon>\n <path\n fill=\"#25468f\"\n d=\"M885.19,494.47h-21.06l-5.1-21.36h21.06l5.1,21.36Zm-19.8-1.68h17.75l-4.29-18h-17.75l4.29,18Z\"\n ></path>\n <polygon\n fill=\"#25468f\"\n points=\"873.14 484.58 861.71 484.58 858.97 473.1 870.4 473.1 873.14 484.58\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#25468f\"\n points=\"917.41 483.78 898.01 483.78 893.31 464.1 912.72 464.1 917.41 483.78\"\n ></polygon>\n <polygon\n fill=\"#25468f\"\n points=\"929.46 493.62 910.06 493.62 905.36 473.94 924.77 473.94 929.46 493.62\"\n ></polygon>\n <polygon\n fill=\"#6b98f6\"\n points=\"916.86 483.31 907.97 483.31 905.84 474.37 914.73 474.37 916.86 483.31\"\n ></polygon>\n </g>\n </g>\n </g>\n <g>\n <path\n fill=\"#3c4aaa\"\n d=\"M429.21,674.95h-67.18c-8.96,0-17.83-7.37-19.81-16.46l-50.55-231.5c-1.98-9.09,3.67-16.46,12.63-16.46h67.18c8.96,0,17.83,7.37,19.81,16.46l50.55,231.5c1.98,9.09-3.67,16.46-12.63,16.46Z\"\n ></path>\n <rect fill=\"#a9c2ff\" height=\".44\" width=\"99.62\" y=\"462.59\" x=\"299.49\"></rect>\n <rect fill=\"#a9c2ff\" height=\".44\" width=\"99.63\" y=\"517.14\" x=\"311.4\"></rect>\n <rect fill=\"#a9c2ff\" height=\".44\" width=\"99.63\" y=\"571.69\" x=\"323.31\"></rect>\n <path\n fill=\"#fff\"\n d=\"M360.43,446.51c.13-1.17-5.02-21.24-5.02-21.24l18.26,15.01-8.97-.32-4.27,6.56Z\"\n ></path>\n <path\n fill=\"#cedfff\"\n d=\"M415.47,651.23h-35.38l-7.83-35.84h35.38l7.83,35.84Zm-33.8-2h31.35l-6.95-31.85h-31.35l6.95,31.85Z\"\n ></path>\n <polygon\n fill=\"#ff7536\"\n points=\"390.05 630.85 356.68 630.85 349.29 597 382.66 597 390.05 630.85\"\n ></polygon>\n <polygon fill=\"#ff7536\" points=\"382 651.12 379.75 649.34 405.73 615.5 407.98 617.27 382 651.12\"></polygon>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M315.51,446.51c.13-1.17-5.02-21.24-5.02-21.24l18.26,15.01-8.97-.32-4.27,6.56Z\"\n ></path>\n <g>\n <polygon\n fill=\"#cedfff\"\n points=\"322.59 486.27 319.9 486.27 318.83 481.4 337.08 481.4 338.1 486.08 335.41 486.08 334.99 484.13 322.12 484.13 322.59 486.27\"\n ></polygon>\n <polygon\n fill=\"#cedfff\"\n points=\"332.96 498.16 330.27 498.16 326.91 482.76 329.6 482.76 332.96 498.16\"\n ></polygon>\n <polygon\n fill=\"#cedfff\"\n points=\"335.38 499.13 328.28 499.13 327.68 496.4 334.79 496.4 335.38 499.13\"\n ></polygon>\n </g>\n <polygon\n fill=\"#cedfff\"\n points=\"371.78 500.83 369.35 499.06 382.17 478.6 384.6 480.37 371.78 500.83\"\n ></polygon>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M340.97,548.52c-5.13,0-10.23-4.24-11.37-9.44-1.14-5.21,2.11-9.44,7.25-9.44s10.23,4.24,11.37,9.44c1.14,5.21-2.11,9.44-7.25,9.44Zm-3.58-16.39c-3.78,0-6.17,3.12-5.33,6.95,.84,3.83,4.59,6.95,8.37,6.95s6.17-3.12,5.33-6.95c-.84-3.83-4.59-6.95-8.37-6.95Z\"\n ></path>\n <path\n fill=\"#cedfff\"\n d=\"M358.69,556.72c-.32,0-.67-.13-.97-.38l-12.38-10.57c-.58-.5-.74-1.28-.36-1.76,.38-.48,1.17-.46,1.75,.03l12.38,10.57c.58,.5,.74,1.28,.36,1.76-.19,.23-.47,.35-.78,.35Z\"\n ></path>\n </g>\n <polygon\n fill=\"#cedfff\"\n points=\"385.5 528.76 390.11 537.32 398.98 537.32 392.96 542.61 397.57 551.16 389.24 545.87 383.22 551.16 384.09 542.61 375.76 537.32 384.63 537.32 385.5 528.76\"\n ></polygon>\n </g>\n </g>\n <g>\n <path\n fill=\"#fa8b79\"\n d=\"M1241.96,453.88s.24,13.48-1.75,13.23c-1.99-.25-4.7-11.3-4.72-11.14-.02,.17,.9,11.62-1.6,12.19-2.51,.57-5.05-12.13-5.05-12.13,0,0,1.68,10.9-.08,11.19-1.76,.29-4.54-10.28-5.27-10.31-.73-.03,2.34,9.06,.19,9.53-2.15,.46-6.94-12.33-5.32-13.96,1.62-1.63,4.15,.11,4.15,.11,0,0,3.12-2.35,5.52-1.02,0,0,5.62-1.14,7.31,1.39,0,0,3.51-3.06,6.61,.91Z\"\n ></path>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M1278.23,402.24l45.59,166.75c1.95,7.13-2.5,12.92-9.94,12.92h-307.72c-7.44,0-15.05-5.78-17-12.92l-45.59-166.75c-1.95-7.13,2.5-12.92,9.94-12.92h307.72c7.44,0,15.05,5.78,17,12.92Z\"\n ></path>\n <g>\n <polygon\n fill=\"#b0c0ff\"\n points=\"1038.92 477.47 999.17 477.47 988.15 437.16 1027.89 437.16 1038.92 477.47\"\n ></polygon>\n <polygon\n fill=\"#5158bf\"\n points=\"1026.48 467.6 1006.21 467.6 1000.59 447.03 1020.86 447.03 1026.48 467.6\"\n ></polygon>\n <polygon\n fill=\"#ff7536\"\n points=\"1000.44 478.4 997.91 476.54 1026.63 436.23 1029.16 438.08 1000.44 478.4\"\n ></polygon>\n <polygon\n fill=\"#ff7536\"\n points=\"1010.63 455.62 970.89 455.62 959.87 415.3 999.61 415.3 1010.63 455.62\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#ff7536\"\n points=\"1033.21 525.04 1001.26 525.04 992.4 492.63 1024.35 492.63 1033.21 525.04\"\n ></polygon>\n <polygon\n fill=\"#fc7600\"\n points=\"1064.86 525.04 1032.91 525.04 1024.05 492.63 1056 492.63 1064.86 525.04\"\n ></polygon>\n <polygon\n fill=\"#ff8111\"\n points=\"1096.81 525.04 1064.86 525.04 1056 492.63 1087.95 492.63 1096.81 525.04\"\n ></polygon>\n <polygon\n fill=\"#6b98f6\"\n points=\"1128.76 525.04 1096.81 525.04 1087.95 492.63 1119.9 492.63 1128.76 525.04\"\n ></polygon>\n <polygon\n fill=\"#899bfa\"\n points=\"1160.71 525.04 1128.76 525.04 1119.9 492.63 1151.85 492.63 1160.71 525.04\"\n ></polygon>\n <polygon\n fill=\"#697ee3\"\n points=\"1192.66 525.04 1160.71 525.04 1151.85 492.63 1183.8 492.63 1192.66 525.04\"\n ></polygon>\n <polygon\n fill=\"#5158bf\"\n points=\"1224.61 525.04 1192.66 525.04 1183.8 492.63 1215.75 492.63 1224.61 525.04\"\n ></polygon>\n <polygon\n fill=\"#25468f\"\n points=\"1256.56 525.04 1224.61 525.04 1215.75 492.63 1247.7 492.63 1256.56 525.04\"\n ></polygon>\n <polygon\n fill=\"#a1b3ff\"\n points=\"1042.07 557.45 1010.12 557.45 1001.26 525.04 1033.21 525.04 1042.07 557.45\"\n ></polygon>\n <polygon\n fill=\"#899bfa\"\n points=\"1073.72 557.45 1041.77 557.45 1032.91 525.04 1064.86 525.04 1073.72 557.45\"\n ></polygon>\n <polygon\n fill=\"#5158bf\"\n points=\"1105.67 557.45 1073.72 557.45 1064.86 525.04 1096.81 525.04 1105.67 557.45\"\n ></polygon>\n <polygon\n fill=\"#25468f\"\n points=\"1137.62 557.45 1105.67 557.45 1096.81 525.04 1128.76 525.04 1137.62 557.45\"\n ></polygon>\n </g>\n <path\n fill=\"#ff8111\"\n d=\"M1258.13,429.21h-167.36c-2.3,0-4.7-1.91-5.34-4.24h0c-.64-2.33,.72-4.24,3.02-4.24h167.36c2.3,0,4.7,1.91,5.34,4.24h0c.64,2.33-.72,4.24-3.02,4.24Z\"\n ></path>\n <path\n fill=\"#6b98f6\"\n d=\"M1263.98,450.63h-167.36c-2.3,0-4.7-1.91-5.34-4.24h0c-.64-2.33,.72-4.24,3.02-4.24h167.36c2.3,0,4.7,1.91,5.34,4.24h0c.64,2.33-.72,4.24-3.02,4.24Z\"\n ></path>\n <path\n fill=\"#5158bf\"\n d=\"M1269.84,472.05h-167.36c-2.3,0-4.7-1.91-5.34-4.24h0c-.64-2.33,.72-4.24,3.02-4.24h167.36c2.3,0,4.7,1.91,5.34,4.24h0c.64,2.33-.72,4.24-3.02,4.24Z\"\n ></path>\n <g>\n <path\n fill=\"#5158bf\"\n d=\"M1062.31,418.73h5.04c2.65,0,4.59,1.44,5.2,3.65,.51,1.88-.29,3.01-1.75,3.47l4.24,4.34h-2.34l-3.9-4h-2.45l1.09,4h-1.99l-3.14-11.47Zm6.45,5.68c1.42,0,2.12-.75,1.79-1.95-.34-1.23-1.39-1.9-2.86-1.9h-2.89l1.05,3.85h2.91Z\"\n ></path>\n <path\n fill=\"#5158bf\"\n d=\"M1068.12,446.11c-.88-3.21,.8-5.93,4.21-5.93,1.97,0,3.33,.56,4.77,1.56l-.84,1.52c-1.08-.75-2.06-1.23-3.5-1.23-2.08,0-3.16,1.85-2.55,4.08,.64,2.36,2.65,4.1,4.96,4.1,1.07,0,1.94-.34,2.49-.87l-.59-2.15h-2.89l-.48-1.75h4.81l1.32,4.82c-.85,.97-2.23,1.79-4.23,1.79-3.54,0-6.56-2.56-7.48-5.93Z\"\n ></path>\n <path\n fill=\"#5158bf\"\n d=\"M1074.44,463.09h5.07c1.29,0,2.41,.36,3.23,1.02,.64,.51,1.07,1.13,1.29,1.93,.38,1.38-.2,2.11-.92,2.56,1.45,.46,2.58,1.23,3.01,2.82,.56,2.05-.8,3.15-3.32,3.15h-5.23l-3.14-11.47Zm5.99,4.83c1.28,0,1.99-.51,1.7-1.59-.25-.9-1.11-1.46-2.38-1.46h-2.86l.83,3.05h2.71Zm1.91,4.85c1.36,0,2.03-.54,1.74-1.61-.26-.97-1.18-1.54-2.75-1.54h-3.15l.86,3.15h3.29Z\"\n ></path>\n </g>\n </g>\n </g>\n <g>\n <g>\n <path\n fill=\"#ffae73\"\n d=\"M640.44,422.49c-.89,1.03-1,2.18-.56,3.41,0,0,0,.01,0,.02,.81,2.27,3.49,4.81,6.6,7.35,.4,.33,.75,.62,1.06,.9,.08,.07,.16,.14,.24,.22,.06,.06,.12,.11,.18,.17,2.9,2.71,1.81,3.34,7.03,8.85,5.95,6.28,10.04,6.39,11.21,5.82,.99-.49-1.02-3.82-3.23-7.56-.11-.18-.21-.36-.32-.55-.3-.5-.59-1-.88-1.5-2.6-4.5-1.93-6.62-1.32-13.32,.5-5.45,8.35-30.42,8.35-30.42l-11.4-1.99s-3.43,19.89-7.21,22.95c-2.02,1.63-4.29,1.65-6.23,2.86-.14,.08-.27,.17-.4,.26-1.1,.74-2.23,1.51-3.12,2.54Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M640.44,422.49c-.89,1.03-1,2.18-.56,3.41,0,0,0,.01,0,.02,.99,2.27,3.61,4.8,6.62,7.33,.39,.33,.74,.64,1.05,.92,.08,.07,.16,.14,.24,.22,.06,.06,.12,.11,.18,.17,2.9,2.71,1.81,3.34,7.03,8.85,5.95,6.28,10.04,6.39,11.21,5.82,.99-.49-1.02-3.82-3.23-7.56-1.16-.43-6.54-2.65-10.6-7.92-3.45-4.47-5.79-10.16-8.14-13.65-.26-.05-.41-.08-.67-.13-1.1,.74-2.23,1.51-3.12,2.54Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M732.33,415.27c.7,3.57,5.72,2.97,11.32,1.58,5.6-1.39,4.27,.26,12.24-.63,7.97-.9,10.39-3.91,10.63-5.11,.22-1.07-3.72-1.44-7.95-1.94-.53-.06-1.07-.13-1.6-.19-4.77-.61-8.26-3.73-12.6-6.29-4.1-2.43-10.23-12.33-10.23-12.33l-10.93,.88s5.74,8.84,7.96,12.68c1.31,2.26,1.24,5.25,1.07,7.56-.08,1.25-.17,2.54,.08,3.79Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M743.65,416.85c5.6-1.39,4.27,.26,12.24-.63,7.97-.9,10.39-3.91,10.63-5.11,.22-1.07-3.72-1.44-7.95-1.94l-.04,.08s-4.78,3.44-11.42,3.6c-5.41,.13-11.14-1.44-14.87-1.38-.08,1.25-.17,2.54,.08,3.79,.7,3.57,5.72,2.97,11.32,1.58Z\"\n ></path>\n <path\n fill=\"#f28018\"\n d=\"M690.43,344.35l-10.22,27.9-13.34,36.43s-3.62,.35-7.09-.66c-3.19-.94-6.86-3.39-6.86-3.39,0,0,3.71-39.12,10.62-61.57,1.77-5.76,3.76-10.43,5.95-13.05,10.72-12.85,20.95,14.33,20.95,14.33Z\"\n ></path>\n <path\n fill=\"#ff912b\"\n d=\"M680.04,300.04c-5.82-1.9-21-.03-37.47,2.99-4.55,.84-9.14-1.27-11.53-5.28h0l-41.44-3.28s-13.68,30.76-6.19,50.36c1.1,2.88,3.52,4.68,7.24,4.74h0s25.04,.04,33.05,.04c20.61,0,43.62-14.37,46.59-14.97,4.87-.99,6.82,8.89,11.69,19.27,4.87,10.38,45.79,45.96,45.79,45.96,0,0,6.29,.06,8.89-.92,2.79-1.06,3.82-2.44,3.82-2.44,0,0-45.34-91.51-60.45-96.45Z\"\n ></path>\n <path\n fill=\"#10294c\"\n d=\"M626.64,174.3c-3.08-1.86-6.08-2.14-7.92-2.09-1.28,.04-2.56-.05-3.82-.23-15.82-2.35-25.34,20.95-25.9,27.99-1.02,12.93-7.77,14.9-17.26,23-19.03,16.23-13.45,35.1-3.04,42.11,6.24,4.21,17.25,0,17.25,0,.16,.11,30.09-16.98,44.85-25.22,22.12-3.19,4.73-60.19-4.16-65.55Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M618.43,232.84c.06,.04-7.26,2.58-12.16,.38-4.61-2.07-8.1-9.76-8.03-9.76,2.1-.1,4.4-1.96,6.17-14.16l.89,.32,15.01,5.48s-1.09,4.89-1.79,9.54c-.59,3.91-.91,7.65-.09,8.2Z\"\n ></path>\n <path\n fill=\"#f9924f\"\n d=\"M620.31,215.1s-.6,2.64-1.47,7.56c-8.62-1.57-12.32-8.31-13.54-13.04l15.01,5.48Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M622.54,219.95s-20.53-2.8-18.62-15.74c1.91-12.95,.55-22.02,13.74-20.79,13.19,1.24,15,6.56,15.4,11.04,.4,4.48-5.13,25.88-10.52,25.49Z\"\n ></path>\n <path\n fill=\"#10294c\"\n d=\"M632.32,187.37s-13.15,11.49-22.09,12.42c-8.94,.93-12.33-1.98-12.33-1.98,0,0,5.27-4.44,8.44-11.6,.93-2.11,2.91-3.56,5.18-3.76,6.38-.56,18.49-.81,20.79,4.93Z\"\n ></path>\n <path\n fill=\"#10294c\"\n d=\"M624.1,186.34s4.4,4.31,5.78,7.51c1.34,3.09,1.74,10.47,.67,13.4,0,0,6.85-13.51,2.97-20.08-4.11-6.96-9.43-.84-9.43-.84Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M635.72,263.52c-.62,42.17-.17,33.35-4.72,37.36-1.1,.96-4.18,1.54-8.23,1.81-12.75,.86-35.15-1.27-36-3.66-2.94-8.27-.86-10.84-3.32-23.49-.26-1.35-.57-2.8-.94-4.39-2.05-8.69-4.04-11.65,3.22-25.62,6.58-12.65,13.42-22.92,14.03-22.55,17.36,10.45,18.76,1.67,18.76,1.67,0,0,17.51,18.31,17.2,38.88Z\"\n ></path>\n <path\n fill=\"#ff912b\"\n d=\"M680.21,372.25l-13.34,36.43s-3.62,.35-7.09-.66c-3.19-.94-6.86-3.39-6.86-3.39,0,0,3.71-39.12,10.62-61.57l16.67,29.18Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M618.52,224.64s17.86,3.07,19.96,10.87c2.1,7.8,9,55.16,9,55.16,0,0-5.04,4.99-9.23,.73-4.19-4.26-13.2-44.31-13.2-44.31l-6.53-22.46Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M622.77,302.69c-12.75,.86-35.15-1.27-36-3.66-2.94-8.27-.86-10.84-3.32-23.49l6.15-17.56s-1.02,19.55,4.67,24.7c5.68,5.14,23.28,9.93,26.04,14.23,1.33,2.06,2.21,4.13,2.47,5.79Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M608.17,294.46s12.57-2.84,14.6-1.71c2.03,1.13,6.99,5.25,7.61,6.69,.62,1.43-4.52-1.09-6.19-1.54-1.08-.29-3.93,.71-5.34,1.19-5.93,2.01-9.57,.97-9.57,.97l-1.11-5.6Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M599.74,222.97s-16.88,1.05-22.73,9.32c-8.23,11.64-24.55,61.25-15.2,67.87,10.53,7.45,47.95,1.95,47.95,1.95,0,0,1.24-5.9-.49-8.76-1.73-2.86-29.88-7.47-31.18-8.79-1.3-1.32,16.24-25.7,16.24-29.65s5.41-31.95,5.41-31.95Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M623.38,296.31s2.63,3.45,3.5,3.86c.86,.41,1.42,.31,1.42,.31l-1.78-3.24-3.14-.93Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M622.77,292.76l7.66,3.77s-.33,.54-1.27,.5c-.94-.04-3.32-.93-3.32-.93l-3.07-3.34Z\"\n ></path>\n </g>\n <g>\n <polygon\n fill=\"#10294c\"\n points=\"688.18 301.63 608.17 301.63 608.17 303.42 687.47 303.42 688.18 301.63\"\n ></polygon>\n <polygon\n fill=\"#10294c\"\n points=\"626.88 303.42 687.47 303.42 705.7 257.44 645.2 257.44 626.88 303.42\"\n ></polygon>\n <path\n fill=\"#e8f2fa\"\n d=\"M672.18,280.43c.46-1.62-.46-2.93-2.06-2.93s-3.26,1.31-3.71,2.93,.46,2.93,2.06,2.93,3.26-1.31,3.71-2.93Z\"\n ></path>\n </g>\n </g>\n <polygon\n fill=\"#fff\"\n points=\"666.18 584.13 672.4 589.62 666.99 595.92 660.77 590.43 666.18 584.13\"\n ></polygon>\n <g>\n <path\n fill=\"#f28018\"\n d=\"M586.7,695.57c-1.24-4.18-1.86-4.55-1.86-4.55,0,0-38.53,4.87-45.07,4.44-3.88-.25-50.15-15.91-50.15-15.91l-28.09,27.33s69.67,11.64,79.49,10.88c16.23-1.26,41-15.79,41-15.79,0,0,5.65-3.12,4.67-6.4Z\"\n ></path>\n <path\n fill=\"#104c82\"\n d=\"M481.4,1007.55s.54,13.24,3.05,16.46l34.88,.2c-.24-1.37-.39-4.52-5.21-5.38-6.09-1.08-13.25-5.39-16.94-13.56-3.88-8.6-15.77,2.27-15.77,2.27Z\"\n ></path>\n <path\n fill=\"#104c82\"\n d=\"M412.95,1005.64s-2.43,17.59,.87,17.9c.44,.04,14.05,.26,19.95,.36,6.93,.12,18.33-.13,18.33-.13,1.43,.06,2.37-1.51,1.64-2.77-.8-1.37-2.33-2.84-5.24-3.41-6.07-1.19-16.2-5.71-19.74-13.95-3.73-8.66-15.8,1.99-15.8,1.99Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M499.53,825.34s-9.7,34.42-37.49,94.2c-27.79,59.78-29,88.58-29,88.58,0,0-4.21,1.51-9.79,.91-6.04-.65-10.3-3.39-10.3-3.39,0,0,1.8-71.15,14.93-101.31,13.13-30.17,15.8-112.71,15.8-112.71l55.84,33.73Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M515.1,795.72s.77,53.3-8.32,118.75c-9.09,65.44-4.84,95.88-4.84,95.88,0,0-2.41,1.78-9.82,1.75-8.68-.03-13.12-3.67-13.12-3.67,0,0-13.01-65.47-9.28-98.23,3.73-32.76-17.82-112.4-17.82-112.4l63.2-2.08Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M493.98,662.86c-.09,4.18-.64,8.74-2.29,10.97l-9.25,4.93-10.26-7.71s3.76-8.46,2.84-20.82c-.09-.74-.46-5.48-.46-5.58l5.13,2.6,13.93,7.06s0,.28,.09,.65c.09,1.4,.28,4.46,.28,7.9Z\"\n ></path>\n <path\n fill=\"#ff912b\"\n d=\"M442.72,802.31c3.36,15.58,75.23,8.74,74.29-.77-.04-.32-.22-4.72-.48-10.65-.54-12.83-1.38-32.89-1.48-34.45,0-.03,0-.05,0-.08-1.29-13.24-2.54-26.19-2.62-34.65-.07-7.34-1.07-14.84-2.39-21.65-1.22-6.29-2.72-11.99-4.03-16.44-.92-3.13-2.63-5.89-4.9-8.05-1.62-1.54-3.51-2.78-5.6-3.62-.57-.24-1.15-.44-1.74-.62-8.46-2.49-16.99-5.66-20.16-4.72-8.59,2.56-18.15,18-22.67,37.55-8.46,36.6-10.41,88-8.21,98.15Z\"\n ></path>\n <path\n fill=\"#ffa05e\"\n d=\"M493.98,662.86c-5.22-2.14-15.21-6.97-17.96-12.45-1.19-2.42,.64-3.16,3.66-3.16l13.93,7.06s0,.28,.09,.65c.09,1.4,.28,4.46,.28,7.9Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M500.32,653.44s-25.01,7.91-29.63-7.96c-4.62-15.87-10.96-25.54,4.82-31.27,15.77-5.72,20.65-.6,23.46,4.32,2.81,4.92,7.74,32.44,1.35,34.91Z\"\n ></path>\n <path\n fill=\"#0b3563\"\n d=\"M497.99,617s-1.59,18.47-5.36,17.67c-3.77-.8-7.18-1.4-6.63,4.17,.55,5.57,.73,12.26-10.88,13.25-11.61,.99-23.25-29.64-20.06-35.39,9.2-16.59,56.22-19.93,42.93,.3Z\"\n ></path>\n <path\n fill=\"#f28018\"\n d=\"M516.52,790.89c-.54-12.83-1.38-32.89-1.48-34.45,0-.03,0-.05,0-.08l-42.46-25.75s-1.64,60.11,43.95,60.29Z\"\n ></path>\n <g>\n <g>\n <path\n fill=\"#0b3563\"\n d=\"M663,586.79l7.65,6.75s-13.11,14.24-11.89,29.23l-19.58,16.77-16.21-14.32,13.56-22.81s14.53-.53,26.48-15.63Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M643.1,611.15c1.58-1.84,4.33-2.03,6.15-.43,1.81,1.6,2.01,4.39,.43,6.23-1.58,1.84-4.33,2.03-6.15,.43-1.81-1.6-2.01-4.39-.43-6.23Z\"\n ></path>\n <polygon\n fill=\"#fff\"\n points=\"644.37 617.69 643.11 616.58 666.23 589.63 667.49 590.74 644.37 617.69\"\n ></polygon>\n </g>\n <polygon\n fill=\"#6d76ff\"\n points=\"635.64 643.68 619.42 629.36 622.96 625.23 639.18 639.54 635.64 643.68\"\n ></polygon>\n <path\n fill=\"#0b3563\"\n d=\"M458.23,834.69l-.79-.69c-4.26-3.76-4.71-10.32-1-14.64l162.97-190,16.22,14.32-162.97,190c-3.71,4.32-10.17,4.78-14.43,1.02Z\"\n ></path>\n </g>\n <path\n fill=\"#ffae73\"\n d=\"M549.94,736.45s3.13-2.82,3.87-4.77c.25-.68,2.39-3.74,6.03-3.47,3.33,.25,9.24-6.94,9.24-6.94,.86,1.9,3.83,9.03-.42,12.65-3.47,2.95-11.81,8.05-16.87,11.41-5.44,3.61-1.85-8.88-1.85-8.88Z\"\n ></path>\n <path\n fill=\"#ff912b\"\n d=\"M550.35,735.4s-42.11,7.26-45.84,5.42c-5.96-2.94,2.31-46.28,2.31-46.28,0,0,.36-9.82-10.96-12.14-9.83-2.01-19.31,5.46-19.31,5.46,0,0-8.63,7.83-7.52,16.51,2.44,19.25,6.24,58.39,18.93,64.39,16.37,7.74,63.73-21.46,63.73-21.46,0,0,1.58-1.96,1.35-5.6-.2-3.21-2.7-6.3-2.7-6.3Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M588.46,698.68s10.63-3.93,9.69-9.44c-.94-5.51-4.25-4.82-6.25-2.92-2,1.9-.89,11.66-3.44,12.36Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M553.07,733.63s1.45-4.32,3-6.17c1.55-1.85,2.2-4.99,2.91-3.95,.7,1.05-.56,4.8,0,6.23,.56,1.43-5.9,3.89-5.9,3.89Z\"\n ></path>\n </g>\n <rect fill=\"#a9c2ff\" height=\"67.09\" width=\"190.42\" y=\"956.62\" x=\"1304.39\"></rect>\n <rect fill=\"#1e3865\" ry=\"2.37\" rx=\"2.37\" height=\"4.74\" width=\"1620\" y=\"1023.26\"></rect>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default Default\n","import { SSO_URL } from '@/constants'\nimport { AliyunOutlined } from '@ant-design/icons'\nimport { Alert, Button, Card, Col, Divider, Row, Space, Typography } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { Navigate, useLocation, useSearchParams } from 'react-router-dom'\nimport useSWRImmutable from 'swr/immutable'\nimport Default from './default'\nimport { useTokenStore } from '@/stores/token'\nimport { request } from '@/utils/request'\nimport { useTranslation } from '@/utils/i18n'\nimport { useToolkitsContext } from '@/components/ContextProvider'\n\nconst { Title } = Typography\n\nconst Login: FC<PropsWithChildren> = props => {\n const { children } = props\n const [searchParams] = useSearchParams()\n const location = useLocation()\n const { token, setToken } = useTokenStore()\n const t = useTranslation()\n const { localeDropdownMenu } = useToolkitsContext()\n\n useSWRImmutable(\n searchParams.has('ticket') ? `/api/usystem/user/login?ticket=${searchParams.get('ticket')}` : null,\n url => request<{ token: string }>(url),\n {\n suspense: true,\n onSuccess: data => {\n setToken(data.data.token)\n },\n },\n )\n\n if (token) {\n return <Navigate replace to=\"/\" />\n }\n\n return (\n <Row>\n {localeDropdownMenu && <div className=\"fixed top-8 right-8\">{localeDropdownMenu}</div>}\n <Col span={10} offset={3}>\n <div className=\"h-screen flex justify-end items-center\">\n <Default />\n </div>\n </Col>\n <Col span={5} offset={3}>\n <div className=\"h-screen relative\">\n <Card hoverable className=\"absolute left-0 right-0 top-1/2 -translate-y-1/2\">\n {location.state?.notUser && (\n <div className=\"absolute -top-12 left-0 right-0\">\n <Alert banner closable message={t('Login.notRegistered')} type=\"error\" />\n </div>\n )}\n <div className=\"text-center mb-6\">\n <Title level={5}>{t('Login.title')}</Title>\n <div className=\"min-h-10\">{children}</div>\n </div>\n <Divider plain>{t('Login.thirdParty')}</Divider>\n <div className=\"w-full flex justify-center\">\n <Space size=\"small\">\n <Button\n type=\"link\"\n size=\"small\"\n shape=\"round\"\n icon={<AliyunOutlined />}\n href={`${SSO_URL}/login?service=${encodeURIComponent(window.location.origin)}/login`}\n target=\"_self\"\n >\n {t('Login.loginWithIDass')}\n </Button>\n </Space>\n </div>\n </Card>\n </div>\n </Col>\n </Row>\n )\n}\n\nexport default Login\n","import { Button, Result } from 'antd'\nimport { useNavigate } from 'react-router-dom'\nimport { useTranslation } from '@/utils/i18n'\n\nconst NotFound = () => {\n const navigate = useNavigate()\n const t = useTranslation()\n return (\n <div className=\"h-screen flex justify-center items-center\">\n <Result\n status=\"404\"\n title=\"404\"\n subTitle={t('NotFound.subTitle')}\n extra={\n <Button\n type=\"primary\"\n onClick={() => {\n navigate('/')\n }}\n >\n {t('NotFound.buttonText')}\n </Button>\n }\n />\n </div>\n )\n}\n\nexport default NotFound\n","import useSWR from 'swr'\nimport useSWRMutation from 'swr/mutation'\nimport type { PermissionEnumItem, RoleEnumItem, RoleV1, RoleV2 } from '../types'\nimport type { Game } from '@/components/GameSelect'\nimport { usePermission } from '@/hooks/permission'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport { request } from '@/utils/request'\n\nexport function useAllPermissions() {\n return useSWR('/api/usystem/user/allPermssions', url =>\n request<PermissionEnumItem[]>(url, { isGlobalNS: true }).then(response => response.data),\n )\n}\n\nexport function useAllPermissionsV2() {\n return useSWR('/api/usystem/user/allPermissionsV2', url =>\n request<{\n game: Game[]\n permission: PermissionEnumItem[]\n }>(url, { isGlobalNS: true }).then(response => response.data),\n )\n}\n\nexport function useAllRoles() {\n const { accessible } = usePermission('200005', { isGlobalNS: true })\n return useSWR(accessible ? '/api/usystem/role/all' : null, url =>\n request<RoleEnumItem[]>(url, { isGlobalNS: true }).then(response => response.data),\n )\n}\n\nexport function useRole(name: string) {\n const { usePermissionApiV2 } = useToolkitsContext()\n return useSWR(`/api/usystem/role/${usePermissionApiV2 ? 'infoV2' : 'info'}?name=${name}`, (url: string) =>\n request<RoleV1 | RoleV2>(url, { isGlobalNS: true }).then(response => response.data),\n )\n}\n\nexport function useCreateRole() {\n const { usePermissionApiV2 } = useToolkitsContext()\n\n return useSWRMutation(\n usePermissionApiV2 ? '/api/usystem/role/createV2' : '/api/usystem/role/create',\n (\n url: string,\n {\n arg,\n }: {\n arg: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useUpdateRole() {\n const { usePermissionApiV2 } = useToolkitsContext()\n\n return useSWRMutation(\n usePermissionApiV2 ? '/api/usystem/role/updateV2' : '/api/usystem/role/update',\n (\n url: string,\n {\n arg,\n }: {\n arg: { id: number; name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useRemoveRole() {\n return useSWRMutation(\n '/api/usystem/role/delete',\n (\n url,\n {\n arg,\n }: {\n arg: { id: number; name: string }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useCreateUser() {\n return useSWRMutation(\n '/api/usystem/user/create',\n (\n url,\n {\n arg,\n }: {\n arg: { name: string; roles: string[] }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useUpdateUser() {\n return useSWRMutation(\n '/api/usystem/user/update',\n (\n url,\n {\n arg,\n }: {\n arg: { id: string; name: string; roles: string[] }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useRemoveUser() {\n return useSWRMutation(\n '/api/usystem/user/delete',\n (\n url,\n {\n arg,\n }: {\n arg: { id: string; name: string }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n","import type { PermissionEnumItem } from '@/features/permission'\nimport { useTranslation } from '@/utils/i18n'\nimport { Checkbox, Col, Collapse, Row } from 'antd'\nimport type { CheckboxChangeEvent } from 'antd/es/checkbox'\nimport type { FC } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\n\ninterface PermissionCollapseProps {\n expand?: boolean\n permissions?: PermissionEnumItem[]\n readonly?: boolean\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst PermissionCollapse: FC<PermissionCollapseProps> = props => {\n const { permissions, readonly, expand, value, onChange } = props\n const [activeKey, setActiveKey] = useState<string[]>([])\n const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>({})\n const [internalValue, setInternalValue] = useState<string[]>(value ?? [])\n const t = useTranslation()\n\n const onCollapseChange = useCallback((key: string | string[]) => {\n setActiveKey(key as string[])\n }, [])\n\n const getCheckedValue = (checkedValue: boolean, codes: string[]) => {\n let tempValue: string[] = []\n\n if (checkedValue) {\n tempValue = [...new Set(internalValue.concat(codes))]\n } else {\n tempValue = internalValue.slice()\n\n codes.forEach(code => {\n const index = tempValue.findIndex(item => item === code)\n if (index > -1) {\n tempValue.splice(index, 1)\n }\n })\n }\n\n return tempValue\n }\n\n const onCheckChange = (e: CheckboxChangeEvent, codes: string[]) => {\n const checkedValue = getCheckedValue(e.target.checked, codes)\n setInternalValue(checkedValue)\n onChange?.(checkedValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? [])\n }, [value])\n\n useEffect(() => {\n if (expand) {\n setActiveKey((permissions ?? []).map(({ category }) => category))\n }\n }, [expand, permissions])\n\n useEffect(() => {\n const checkedValue = (permissions ?? []).reduce(\n (acc, curr) => {\n acc[curr.category] = curr.permissions.every(item => internalValue?.includes(item.value))\n return acc\n },\n {} as Record<string, boolean>,\n )\n\n setCheckedMap(checkedValue)\n }, [internalValue, permissions])\n\n return (\n <Collapse\n style={{ width: '100%' }}\n collapsible=\"header\"\n activeKey={activeKey}\n items={(permissions ?? []).map(item => ({\n key: item.category,\n label: item.category,\n extra: !readonly && (\n <Checkbox\n checked={checkedMap[item.category]}\n onChange={e => {\n onCheckChange(\n e,\n item.permissions.map(permission => permission.value),\n )\n }}\n >\n {t('selectAll')}\n </Checkbox>\n ),\n children: (\n <Checkbox.Group style={{ width: '100%' }} value={internalValue} disabled={readonly}>\n <Row gutter={[10, 10]} style={{ width: '100%' }}>\n {item.permissions.map(permission => (\n <Col key={permission.value} span={6}>\n <Checkbox\n value={permission.value}\n onChange={e => {\n onCheckChange(e, [permission.value])\n }}\n >\n {permission.label}\n </Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n ),\n }))}\n onChange={onCollapseChange}\n />\n )\n}\n\nexport default PermissionCollapse\n","import { Skeleton, Typography } from 'antd'\nimport { useAllPermissions } from '../../hooks'\nimport PermissionCollapse from '../PermissionCollapse'\nimport type { RoleV1 } from '../../types'\nimport type { PermissionListPropsBase } from '../PermissionList'\nimport type { FC } from 'react'\nimport { useTranslation } from '@/utils/i18n'\n\nconst { Text } = Typography\n\ninterface PermissionListV1Props extends PermissionListPropsBase {\n value?: RoleV1['permissions']\n onChange?: (checkedValue: RoleV1['permissions']) => void\n}\n\nconst PermissionListV1: FC<PermissionListV1Props> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permissions, isLoading, error } = useAllPermissions()\n const t = useTranslation()\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n return (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value}\n permissions={permissions}\n readonly={readonly}\n expand={expand}\n onChange={onChange}\n />\n </Skeleton>\n )\n}\n\nexport default PermissionListV1\n","import { Button, Card, Divider, Empty, Select, Skeleton, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useState } from 'react'\nimport type { RoleV2 } from '../../types'\nimport { useAllPermissionsV2 } from '../../hooks'\nimport PermissionCollapse from '../PermissionCollapse'\nimport type { PermissionListPropsBase } from '../PermissionList'\nimport { useTranslation } from '@/utils/i18n'\n\nconst { Text } = Typography\nconst { Option } = Select\n\ninterface PermissionListV2Props extends PermissionListPropsBase {\n value?: RoleV2['permissions']\n onChange?: (checkedValue: RoleV2['permissions']) => void\n}\n\nconst PermissionListV2: FC<PermissionListV2Props> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: { permission, game: games } = {}, isLoading, error } = useAllPermissionsV2()\n const [gameList, setGameList] = useState<{ gameId: string; permissions: string[] }[]>([])\n const globalPermissions = permission?.filter(item => item.is_common)\n const gamePermissions = permission?.filter(item => !item.is_common)\n const t = useTranslation()\n\n useEffect(() => {\n const list: { gameId: string; permissions: string[] }[] = []\n\n Object.keys(value ?? {}).forEach(key => {\n if (key !== 'global') {\n list.push({ gameId: key, permissions: value?.[key] ?? [] })\n }\n })\n\n setGameList(list)\n }, [value])\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n const addGame = () => {\n setGameList(prev => [...prev, { gameId: '', permissions: [] }])\n }\n\n const removeGame = (index: number) => {\n setGameList(prev => prev.filter((_, i) => i !== index))\n }\n\n return (\n <div className=\"flex flex-col w-full\">\n <div className=\"mb-12\">\n <Divider dashed>{t('PermissionList.baseSectionTitle')}</Divider>\n </div>\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.global}\n readonly={readonly}\n permissions={globalPermissions}\n expand={expand}\n onChange={newValue => {\n onChange?.({\n ...value,\n global: newValue,\n })\n }}\n />\n </Skeleton>\n <div className=\"my-12\">\n <Divider dashed>{t('PermissionList.gameSectionTitle')}</Divider>\n </div>\n {gameList.map((item, index) => (\n <Card\n title={\n <Space>\n <Text>{t('game')}</Text>\n {readonly ? (\n <Text>{games?.find(game => game.id === item.gameId)?.name}</Text>\n ) : (\n <Select\n disabled={readonly}\n value={gameList[index].gameId || undefined}\n style={{ width: '160px' }}\n placeholder={t('PermissionList.gameSelectPlaceholder')}\n onChange={selectedValue => {\n setGameList(pev => {\n const temp = pev.slice()\n temp[index].gameId = selectedValue\n return temp\n })\n }}\n >\n {games?.map(game => (\n <Option key={game.id} value={game.id} disabled={gameList.some(({ gameId }) => gameId === game.id)}>\n {game.name}\n </Option>\n ))}\n </Select>\n )}\n </Space>\n }\n key={index}\n className=\"mb-6\"\n extra={\n !readonly && (\n <Button\n type=\"link\"\n onClick={() => {\n removeGame(index)\n }}\n >\n {t('PermissionList.removeText')}\n </Button>\n )\n }\n >\n {gameList[index].gameId ? (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.[gameList[index].gameId]}\n readonly={readonly}\n expand={expand}\n permissions={gamePermissions}\n onChange={newValue => {\n onChange?.({\n ...value,\n [gameList[index].gameId]: newValue,\n })\n }}\n />\n </Skeleton>\n ) : (\n <Empty description={t('PermissionList.gameSectionDescription')} />\n )}\n </Card>\n ))}\n {!readonly && (\n <Button block type=\"dashed\" onClick={addGame}>\n {t('PermissionList.addText')}\n </Button>\n )}\n </div>\n )\n}\n\nexport default PermissionListV2\n","import { useToolkitsContext } from '@/components/ContextProvider'\nimport type { RoleV1, RoleV2 } from '@/features/permission'\nimport type { FC } from 'react'\nimport PermissionListV1 from '../PermissionListV1'\nimport PermissionListV2 from '../PermissionListV2'\n\nexport interface PermissionListPropsBase {\n expand?: boolean\n readonly?: boolean\n}\n\ninterface PermissionListProps extends PermissionListPropsBase {\n value?: RoleV1['permissions'] | RoleV2['permissions']\n onChange?: (checkedValue: RoleV1['permissions'] | RoleV2['permissions']) => void\n}\n\nconst PermissionList: FC<PermissionListProps> = (props: PermissionListProps) => {\n const { value } = props\n const { usePermissionApiV2 } = useToolkitsContext()\n\n return (\n <>\n {usePermissionApiV2 ? (\n <PermissionListV2 {...props} value={value as RoleV2['permissions']} />\n ) : (\n <PermissionListV1 {...props} value={value as RoleV1['permissions']} />\n )}\n </>\n )\n}\n\nexport default PermissionList\n","export interface PermissionEnumItem {\n category: string\n is_common?: boolean\n permissions: {\n label: string\n value: string\n route: string\n }[]\n}\n\nexport interface RoleEnumItem {\n id: string\n name: string\n}\n\nexport interface RoleListItem {\n id: number\n name: string\n ctime: string\n}\n\nexport interface RoleV1 {\n id: number\n name: string\n ctime: string\n permissions: string[]\n}\n\nexport interface RoleV2 {\n id: number\n name: string\n ctime: string\n permissions: Record<string, string[]>\n}\n\nexport interface UserListItem {\n id: string\n name: string\n ctime: string\n roles: string[]\n}\n","import PermissionList from './components/PermissionList'\n\nexport * from './hooks'\nexport * from './types'\nexport { PermissionList }\n","import Highlight from '@/components/Highlight'\nimport PermissionButton from '@/components/PermissionButton'\nimport QueryList from '@/components/QueryList'\nimport type { UserListItem } from '@/features/permission'\nimport { useAllRoles, useCreateUser, useRemoveUser, useUpdateUser } from '@/features/permission'\nimport { useFormModal } from '@/hooks/formModal'\nimport { useQueryListStore } from '@/stores/queryList'\nimport { useTranslation } from '@/utils/i18n'\nimport { UserAddOutlined } from '@ant-design/icons'\nimport type { TableColumnsType } from 'antd'\nimport { App, Card, Col, Form, Input, Row, Select, Space, Tag } from 'antd'\nimport { produce } from 'immer'\nimport type { FC } from 'react'\nimport { Link } from 'react-router-dom'\n\nconst { Option } = Select\n\nexport const url = '/api/usystem/user/list'\n\nfunction useCreatingUserModal() {\n const { message } = App.useApp()\n const create = useCreateUser()\n const { data: roles, isLoading } = useAllRoles()\n const { mutate } = useQueryListStore()\n const t = useTranslation()\n\n return useFormModal<{ id: string; name: string; roles: string[] }>({\n title: t('UserList.createTitle'),\n content: form => (\n <Form form={form} labelCol={{ flex: '80px' }}>\n <Form.Item label={t('name')} name=\"name\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label={t('role')} name=\"roles\">\n <Select allowClear mode=\"multiple\" loading={isLoading}>\n {(roles ?? []).map(role => (\n <Option value={role.name} key={role.id}>\n {role.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Form>\n ),\n async onConfirm(values) {\n await create.trigger(values)\n mutate(url, { page: 1 })\n message.success(t('UserList.createSuccessfully'))\n },\n })\n}\n\nfunction useUpdatingUserModal() {\n const { message } = App.useApp()\n const update = useUpdateUser()\n const { data: roles, isLoading } = useAllRoles()\n const { mutate } = useQueryListStore()\n const t = useTranslation()\n\n return useFormModal<{ id: string; name: string; roles: string[] }>({\n title: t('UserList.updateTitle'),\n content: form => (\n <Form form={form} labelCol={{ flex: '80px' }}>\n <Form.Item hidden name=\"id\">\n <Input />\n </Form.Item>\n <Form.Item label={t('name')} name=\"name\" rules={[{ required: true }]}>\n <Input readOnly />\n </Form.Item>\n <Form.Item label={t('role')} name=\"roles\">\n <Select allowClear mode=\"multiple\" loading={isLoading}>\n {(roles ?? []).map(role => (\n <Option value={role.name} key={role.id}>\n {role.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Form>\n ),\n async onConfirm(values) {\n await update.trigger(values)\n mutate(\n url,\n undefined,\n prev =>\n produce(prev, draft => {\n const match = draft?.list?.find(item => item.id === values.id)\n\n if (match) {\n match.roles = values.roles\n }\n }),\n { revalidate: false },\n )\n message.success(t('UserList.updateSuccessfully'))\n },\n })\n}\n\nconst UserList: FC = () => {\n const { modal, message } = App.useApp()\n const remove = useRemoveUser()\n const { mutate } = useQueryListStore()\n const { show: showCreatingModal, contextHolder: creatingContextHolder } = useCreatingUserModal()\n const { show: showUpdatingModal, contextHolder: updatingContextHolder } = useUpdatingUserModal()\n const t = useTranslation()\n\n const columns: TableColumnsType<UserListItem> = [\n {\n title: t('name'),\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n },\n {\n title: t('role'),\n dataIndex: 'roles',\n key: 'roles',\n width: '40%',\n render(value: string[]) {\n return (\n <Row gutter={[4, 4]}>\n {(value || []).map((item: string) => (\n <Col key={item}>\n {item === 'root' ? (\n <Tag color=\"#f50\">{item}</Tag>\n ) : (\n <Tag color=\"#ff5a00\">\n <Link to={`/permission/role/${item}`}>{item}</Link>\n </Tag>\n )}\n </Col>\n ))}\n </Row>\n )\n },\n },\n {\n title: t('creationTime'),\n dataIndex: 'Ctime',\n key: 'ctime',\n },\n {\n title: t('operation'),\n width: 150,\n align: 'center',\n render: (value: UserListItem) => (\n <Space>\n <PermissionButton\n isGlobalNS\n size=\"small\"\n type=\"link\"\n code=\"100003\"\n onClick={() => {\n showUpdatingModal({\n initialValues: {\n id: value.id,\n name: value.name,\n roles: value.roles,\n },\n })\n }}\n >\n {t('update')}\n </PermissionButton>\n <PermissionButton\n isGlobalNS\n danger\n size=\"small\"\n code=\"100004\"\n type=\"link\"\n onClick={() => {\n modal.confirm({\n title: t('UserList.deleteTitle'),\n content: (\n <Highlight texts={[value.name]}>{t('UserList.deleteContent', { user: value.name })}</Highlight>\n ),\n async onOk() {\n await remove.trigger({\n id: value.id,\n name: value.name,\n })\n mutate(url, undefined, prev => {\n return produce(prev, draft => {\n const index = draft?.list?.findIndex(item => item.id === value.id)\n if (index) {\n draft?.list?.splice(index, 1)\n }\n })\n })\n message.success(t('UserList.deleteSuccessfully'))\n },\n })\n }}\n >\n {t('delete')}\n </PermissionButton>\n </Space>\n ),\n },\n ]\n\n return (\n <Card\n title={t('user')}\n extra={\n <PermissionButton\n isGlobalNS\n type=\"primary\"\n icon={<UserAddOutlined />}\n code=\"100002\"\n onClick={() => {\n showCreatingModal()\n }}\n >\n {t('UserList.createTitle')}\n </PermissionButton>\n }\n >\n <QueryList<UserListItem, undefined, { List: UserListItem[]; Total: number }>\n isGlobalNS\n code=\"100001\"\n url={url}\n rowKey=\"id\"\n columns={columns}\n transformResponse={response => {\n const { List, Total } = response\n return { list: List, total: Total }\n }}\n />\n {creatingContextHolder}\n {updatingContextHolder}\n </Card>\n )\n}\n\nexport default UserList\n","import { useToolkitsContext } from '@/components/ContextProvider'\nimport Highlight from '@/components/Highlight'\nimport PermissionButton from '@/components/PermissionButton'\nimport QueryList from '@/components/QueryList'\nimport type { RoleListItem, RoleV1, RoleV2 } from '@/features/permission'\nimport { PermissionList, useCreateRole, useRemoveRole, useUpdateRole } from '@/features/permission'\nimport { useFormModal } from '@/hooks/formModal'\nimport { usePermission } from '@/hooks/permission'\nimport { useQueryListStore } from '@/stores/queryList'\nimport { useTranslation } from '@/utils/i18n'\nimport { request } from '@/utils/request'\nimport { UsergroupAddOutlined } from '@ant-design/icons'\nimport type { TableColumnsType } from 'antd'\nimport { App, Card, Form, Input, Space } from 'antd'\nimport { produce } from 'immer'\nimport { Link } from 'react-router-dom'\n\nconst url = '/api/usystem/role/list'\n\nconst useCreatingUserModal = () => {\n const { message } = App.useApp()\n const { mutate } = useQueryListStore()\n const create = useCreateRole()\n const t = useTranslation()\n\n const onConfirm = async (values: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }) => {\n await create.trigger({\n name: `role_${values.name}`,\n permissions: values.permissions,\n })\n mutate(url, { page: 1 })\n message.success(t('RoleList.createSuccessfully'))\n }\n\n return useFormModal<{\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }>({\n title: t('RoleList.createTitle'),\n width: '50vw',\n content: form => (\n <Form form={form} layout=\"vertical\">\n <Form.Item label={t('name')} name=\"name\" rules={[{ required: true }]}>\n <Input addonBefore=\"role_\" />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </Form>\n ),\n onConfirm,\n })\n}\n\nconst useUpdatingRoleModal = () => {\n const { message } = App.useApp()\n const { mutate } = useQueryListStore()\n const update = useUpdateRole()\n const t = useTranslation()\n\n return useFormModal<{\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }>({\n title: t('RoleList.updateTitle'),\n width: '50vw',\n content: form => (\n <Form form={form}>\n <Form.Item label={t('name')} name=\"name\" rules={[{ required: true }]}>\n <Input readOnly addonBefore=\"role_\" />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </Form>\n ),\n onConfirm: async (values, _form, extraValues: { id: number }) => {\n await update.trigger({\n id: extraValues.id as number,\n name: `role_${values.name}`,\n permissions: values.permissions,\n })\n\n mutate(\n url,\n undefined,\n prev =>\n produce(prev, draft => {\n const match = draft?.list?.find(item => item.id === extraValues.id)\n\n if (match) {\n match.permissions = values.permissions\n }\n }),\n { revalidate: false },\n )\n message.success(t('RoleList.updateSuccessfully'))\n },\n })\n}\n\nconst RoleList = () => {\n const { accessible: viewable } = usePermission('200005', { isGlobalNS: true })\n const { modal, message } = App.useApp()\n const { usePermissionApiV2 } = useToolkitsContext()\n const remove = useRemoveRole()\n const { mutate } = useQueryListStore()\n const { show: showCreatingModal, contextHolder: creatingContextHolder } = useCreatingUserModal()\n const { show: showUpdatingModal, contextHolder: updatingContextHolder } = useUpdatingRoleModal()\n const t = useTranslation()\n\n const columns: TableColumnsType<RoleListItem> = [\n {\n title: t('name'),\n key: 'name',\n render(value: RoleListItem) {\n if (viewable) {\n return <Link to={`${value.name}`}>{value.name}</Link>\n } else {\n return <>{value.name}</>\n }\n },\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n },\n {\n title: t('creationTime'),\n dataIndex: 'ctime',\n key: 'ctime',\n },\n {\n title: t('operation'),\n width: 150,\n align: 'center',\n render: (value: RoleListItem) => {\n return (\n <Space size=\"small\">\n <PermissionButton\n isGlobalNS\n code=\"200003\"\n size=\"small\"\n type=\"link\"\n onClick={async () => {\n const { data: role } = await request<RoleV1 | RoleV2>(\n `/api/usystem/role/info${usePermissionApiV2 ? 'V2' : ''}?name=${value.name}`,\n { isGlobalNS: true },\n )\n showUpdatingModal({\n initialValues: {\n permissions: role?.permissions,\n name: role?.name.replace(/^role_/, ''),\n },\n extraValues: {\n id: role?.id,\n },\n })\n }}\n >\n {t('edit')}\n </PermissionButton>\n <PermissionButton\n isGlobalNS\n danger\n code=\"200004\"\n size=\"small\"\n type=\"link\"\n onClick={() => {\n modal.confirm({\n title: t('RoleList.deleteTitle'),\n content: (\n <Highlight texts={[value.name]}>{t('RoleList.deleteContent', { role: value.name })}</Highlight>\n ),\n async onOk() {\n await remove.trigger({\n id: value.id,\n name: value.name,\n })\n mutate(url, undefined, prev => {\n return produce(prev, draft => {\n const index = draft?.list?.findIndex(item => item.id === value.id)\n if (index) {\n draft?.list?.splice(index, 1)\n }\n })\n })\n message.success(t('RoleList.deleteSuccessfully'))\n },\n })\n }}\n >\n {t('delete')}\n </PermissionButton>\n </Space>\n )\n },\n },\n ]\n\n return (\n <Card\n title={t('role')}\n extra={\n <PermissionButton\n isGlobalNS\n type=\"primary\"\n code=\"200002\"\n icon={<UsergroupAddOutlined />}\n onClick={() => {\n showCreatingModal()\n }}\n >\n {t('RoleList.createTitle')}\n </PermissionButton>\n }\n >\n <QueryList<RoleListItem, undefined, { List: RoleListItem[]; Total: number }>\n isGlobalNS\n rowKey=\"name\"\n columns={columns}\n code=\"200001\"\n url={url}\n transformResponse={response => {\n const { List, Total } = response\n return { list: List, total: Total }\n }}\n />\n {creatingContextHolder}\n {updatingContextHolder}\n </Card>\n )\n}\n\nexport default RoleList\n","import { PermissionList, useRole } from '@/features/permission'\nimport { Breadcrumb, Card, Descriptions, Skeleton } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\nimport { useTranslation } from '@/utils/i18n'\n\nconst RoleDetail = () => {\n const params = useParams()\n const { data, isLoading } = useRole(params.name as string)\n const t = useTranslation()\n\n return (\n <>\n <Breadcrumb\n style={{ marginBottom: 24 }}\n items={[\n {\n key: '1',\n title: <Link to=\"/permission/role\">{t('role')}</Link>,\n },\n {\n key: '2',\n title: params.name,\n },\n ]}\n />\n <Card title={t('RoleDetail.title')}>\n <Skeleton loading={isLoading}>\n <Descriptions column={3} layout=\"vertical\">\n <Descriptions.Item label={t('name')}>{data?.name}</Descriptions.Item>\n <Descriptions.Item label=\"ID\">{data?.id}</Descriptions.Item>\n <Descriptions.Item label={t('creationTime')}>{data?.ctime}</Descriptions.Item>\n </Descriptions>\n <PermissionList readonly value={data?.permissions} />\n </Skeleton>\n </Card>\n </>\n )\n}\n\nexport default RoleDetail\n","import ContextProvider, { contextStore, useToolkitsContext } from '@/components/ContextProvider'\nimport type { DynamicTagsProps } from '@/components/DynamicTags'\nimport DynamicTags from '@/components/DynamicTags'\nimport type { FilterFormWrapperProps } from '@/components/FilterFormWrapper'\nimport FilterFormWrapper from '@/components/FilterFormWrapper'\nimport type { Game, GameState } from '@/components/GameSelect'\nimport GameSelect, { useGameStore } from '@/components/GameSelect'\nimport type { HighlightTextsProps } from '@/components/Highlight'\nimport Highlight from '@/components/Highlight'\nimport type { LayoutProps } from '@/components/Layout'\nimport Layout from '@/components/Layout'\nimport type { NavMenuItem } from '@/components/NavMenu'\nimport NavMenu from '@/components/NavMenu'\nimport type { PermissionButtonProps } from '@/components/PermissionButton'\nimport PermissionButton from '@/components/PermissionButton'\nimport type { PermissionGuardProps } from '@/components/PermissionGuard'\nimport PermissionGuard from '@/components/PermissionGuard'\nimport type { QueryListProps, QueryListRef } from '@/components/QueryList'\nimport QueryList, { QueryListAction } from '@/components/QueryList'\nimport RequireGame from '@/components/RequireGame'\nimport UserWidget from '@/components/UserWidget'\nimport type { UseFormModalProps } from '@/hooks/formModal'\nimport { useFormModal } from '@/hooks/formModal'\nimport { usePermission, usePermissions } from '@/hooks/permission'\nimport type { Locale } from '@/locales'\nimport baseRoutes from '@/routes/base'\nimport permissionRoutes from '@/routes/permission'\nimport { useQueryListStore } from '@/stores/queryList'\nimport type { TokenState } from '@/stores/token'\nimport { useTokenStore, useValidateToken } from '@/stores/token'\nimport '@/styles/index.css'\nimport { useTranslation } from '@/utils/i18n'\nimport { request, RequestError } from '@/utils/request'\nimport { mixedStorage } from '@/utils/storage'\n\nexport {\n useFormModal,\n PermissionButton,\n DynamicTags,\n QueryList,\n QueryListAction,\n FilterFormWrapper,\n Highlight,\n GameSelect,\n useGameStore,\n NavMenu,\n Layout,\n PermissionGuard,\n RequireGame,\n ContextProvider,\n contextStore,\n useToolkitsContext,\n UserWidget,\n usePermissions,\n usePermission,\n useQueryListStore,\n baseRoutes,\n permissionRoutes,\n useTranslation,\n mixedStorage,\n useTokenStore,\n useValidateToken,\n request,\n RequestError,\n type Locale,\n type DynamicTagsProps,\n type FilterFormWrapperProps,\n type UseFormModalProps,\n type Game,\n type GameState,\n type HighlightTextsProps,\n type LayoutProps,\n type NavMenuItem,\n type PermissionButtonProps,\n type PermissionGuardProps,\n type QueryListProps,\n type QueryListRef,\n type TokenState,\n}\n","import { PlusOutlined } from '@ant-design/icons'\nimport type { InputRef } from 'antd'\nimport { Input, Space, Tag, theme } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useRef, useState } from 'react'\n\nexport interface DynamicTagsProps {\n initialTags?: string[]\n addable?: boolean\n removable?: boolean\n // 返回 Promise。如果返回 Promise.resolve(true),则添加; 如果返回 Promise.resolve(false) 或 Promise.reject,则不添加\n addCallback?: (addedTag: string) => Promise<boolean>\n // 返回 Promise。如果返回 Promise.resolve(true),则删除; 如果返回 Promise.resolve(false) 或 Promise.reject,则不删除\n removeCallback?: (removedTag: string) => Promise<boolean>\n}\n\nconst DynamicTags: FC<DynamicTagsProps> = props => {\n const { initialTags, addable, removable, addCallback, removeCallback } = props\n const { token } = theme.useToken()\n const [tags, setTags] = useState<string[]>([])\n const [inputVisible, setInputVisible] = useState(false)\n const [inputValue, setInputValue] = useState('')\n const [editInputIndex, setEditInputIndex] = useState(-1)\n const [editInputValue, setEditInputValue] = useState<string>('')\n const inputRef = useRef<InputRef>(null)\n const editInputRef = useRef<InputRef>(null)\n\n useEffect(() => {\n setTags(initialTags ?? [])\n }, [initialTags])\n\n useEffect(() => {\n if (inputVisible) {\n inputRef.current?.focus()\n }\n }, [inputVisible])\n\n useEffect(() => {\n editInputRef.current?.focus()\n }, [inputValue])\n\n const handleClose = async (removedTag: string) => {\n const success = await removeCallback?.(removedTag)\n\n if (success) {\n const newTags = tags.filter(tag => tag !== removedTag)\n setTags(newTags)\n }\n }\n\n const showInput = () => {\n setInputVisible(true)\n }\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value)\n }\n\n const handleInputConfirm = async () => {\n if (inputValue && tags.indexOf(inputValue) === -1) {\n const success = await addCallback?.(inputValue)\n\n if (success) {\n setTags([...tags, inputValue])\n }\n }\n\n setInputVisible(false)\n setInputValue('')\n }\n\n const handleEditInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setEditInputValue(e.target.value)\n }\n\n const handleEditInputConfirm = () => {\n const newTags = [...tags]\n newTags[editInputIndex] = editInputValue\n setTags(newTags)\n setEditInputIndex(-1)\n setInputValue('')\n }\n\n const tagInputStyle: React.CSSProperties = {\n width: 78,\n verticalAlign: 'top',\n }\n\n const tagPlusStyle: React.CSSProperties = {\n background: token.colorBgContainer,\n borderStyle: 'dashed',\n }\n\n return (\n <Space wrap size={[0, 8]}>\n <Space wrap size={[0, 8]}>\n {tags.map((tag, index) => {\n if (editInputIndex === index) {\n return (\n <Input\n ref={editInputRef}\n key={tag}\n size=\"small\"\n style={tagInputStyle}\n value={editInputValue}\n onChange={handleEditInputChange}\n onBlur={handleEditInputConfirm}\n onPressEnter={handleEditInputConfirm}\n />\n )\n }\n\n return (\n <Tag\n key={tag}\n closable={removable}\n style={{ userSelect: 'none' }}\n onClose={async e => {\n e.preventDefault()\n await handleClose(tag)\n }}\n >\n <span\n onDoubleClick={e => {\n if (index !== 0) {\n setEditInputIndex(index)\n setEditInputValue(tag)\n e.preventDefault()\n }\n }}\n >\n {tag}\n </span>\n </Tag>\n )\n })}\n </Space>\n {addable &&\n (inputVisible ? (\n <Input\n ref={inputRef}\n type=\"text\"\n size=\"small\"\n style={tagInputStyle}\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputConfirm}\n onPressEnter={handleInputConfirm}\n />\n ) : (\n <Tag style={tagPlusStyle} onClick={showInput}>\n <PlusOutlined />\n 添加\n </Tag>\n ))}\n </Space>\n )\n}\n\nexport default DynamicTags\n","import * as Antd from 'antd'\nimport { Divider, Space } from 'antd'\nimport type { FC, Key, PropsWithChildren, ReactNode } from 'react'\nimport { Suspense } from 'react'\nimport { Link } from 'react-router-dom'\nimport logo from './logo.png'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport GameSelect from '@/components/GameSelect'\nimport NavMenu from '@/components/NavMenu'\nimport UserWidget from '@/components/UserWidget'\nimport RequireGame from '@/components/RequireGame'\n\nconst { Spin, theme } = Antd\nconst { Header, Sider, Content } = Antd.Layout\n\nexport interface LayoutProps extends PropsWithChildren {\n extras?: { key: Key; children: ReactNode }[]\n}\n\nconst Layout: FC<LayoutProps> = props => {\n const { children, extras } = props\n const {\n token: { colorBgContainer, colorBorder },\n } = theme.useToken()\n const { title, usePermissionApiV2, hideGameSelect, localeDropdownMenu } = useToolkitsContext()\n\n return (\n <Antd.Layout hasSider className=\"h-screen\">\n <Sider\n width={256}\n style={{\n overflow: 'auto',\n height: '100vh',\n position: 'fixed',\n left: 0,\n top: 0,\n bottom: 0,\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colorBorder,\n }}\n theme=\"light\"\n >\n <div className=\"flex items-end px-6 py-4\">\n <img src={logo} alt=\"logo\" className=\"w-8 h-8\" />\n <Link className=\"font-bold text-lg ml-2\" to=\"/\">\n {title}\n </Link>\n </div>\n <NavMenu />\n </Sider>\n <Antd.Layout className=\"ml-64\">\n <Header\n style={{\n padding: '0 24px',\n background: colorBgContainer,\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colorBorder,\n }}\n >\n <div className=\"flex justify-between items-center h-full\">\n <div>{usePermissionApiV2 && !hideGameSelect && <GameSelect />}</div>\n <Space size=\"small\" split={<Divider type=\"vertical\" />}>\n {extras?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n {localeDropdownMenu}\n <UserWidget />\n </Space>\n </div>\n </Header>\n <Content className=\"p-6 bg-gray-50\" style={{ overflow: 'overlay' }}>\n <Suspense\n fallback={\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '200px',\n }}\n />\n }\n >\n {usePermissionApiV2 && !hideGameSelect ? <RequireGame>{children}</RequireGame> : children}\n </Suspense>\n </Content>\n </Antd.Layout>\n </Antd.Layout>\n )\n}\n\nexport default Layout\n","import { Menu } from 'antd'\nimport type {\n ItemType,\n MenuDividerType,\n MenuItemGroupType,\n MenuItemType,\n SubMenuType,\n} from 'antd/es/menu/hooks/useItems'\nimport type { FC, ReactNode } from 'react'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\nimport { useNavStore } from '@/components/NavMenu/store'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport { usePermissions } from '@/hooks/permission'\nimport type { Merge } from 'ts-essentials'\n\n// 扩展 antd Menu 的类型,使其支持一些我们想要的自定义字段。\ntype MenuItemType2 = Merge<\n MenuItemType,\n {\n code /** 权限编号 **/?: string\n route /** 前端路由地址 **/?: string\n }\n>\n\ntype SubMenuType2 = Merge<\n SubMenuType,\n {\n children?: NavMenuItem[]\n }\n>\n\ntype MenuItemGroupType2 = Merge<MenuItemGroupType, { children?: NavMenuItem[] }>\n\nexport type NavMenuItem = MenuItemType2 | SubMenuType2 | MenuItemGroupType2 | MenuDividerType | null\n\nconst withLink = (label?: ReactNode, route?: string): ReactNode => {\n if (!label) {\n return <></>\n }\n\n if (route) {\n return <Link to={route}>{label}</Link>\n }\n\n return label\n}\n\nfunction transformItems(items: NavMenuItem[], permissions?: Record<string, boolean>) {\n const result: ItemType[] = []\n\n for (let i = 0; i < items.length; i++) {\n if (items[i] === null) {\n result[i] = null\n } else if ((items[i] as MenuDividerType).type === 'divider') {\n result[i] = { ...items[i] } as MenuDividerType\n } else {\n if ((items[i] as SubMenuType2 | MenuItemGroupType2).children) {\n const { children, ...restProps } = items[i] as SubMenuType2 | MenuItemGroupType2\n result[i] = {\n ...restProps,\n children: transformItems(children ?? [], permissions),\n } as SubMenuType | MenuItemGroupType\n } else {\n const { route, label, code, ...restProps } = items[i] as MenuItemType2\n const isPass = !code || !permissions || permissions[code]\n\n result[i] = isPass\n ? ({\n ...restProps,\n label: withLink(label, route),\n } as MenuItemType)\n : null\n }\n }\n }\n\n return result\n}\n\n// 拍平导航配置,并且注入 keypath 字段\nfunction flatItems(\n items: NavMenuItem[],\n result: Merge<MenuItemType2, { keypath?: string[] }>[] = [],\n keypath: string[] = [],\n) {\n for (const item of items) {\n const children = (item as SubMenuType2 | MenuItemGroupType2)!.children as NavMenuItem[]\n\n if (Array.isArray(children)) {\n const _keys =\n (item as MenuItemGroupType2)!.type !== 'group' && item!.key ? [...keypath, item!.key as string] : keypath\n flatItems(children, result, _keys)\n } else {\n result.push(Object.assign(item as MenuItemType2, { keypath }))\n }\n }\n\n return result\n}\n\nconst NavMenu: FC = () => {\n const location = useLocation()\n const { menuItems } = useToolkitsContext()\n const flattenItems = useMemo(() => flatItems(menuItems ?? []), [menuItems])\n const codes = flattenItems.map(item => item.code).filter(Boolean) as string[]\n const { data: permissions } = usePermissions(codes, { isGlobalNS: true, suspense: true })\n const internalItems = useMemo(() => transformItems(menuItems ?? [], permissions), [menuItems, permissions])\n const { openKeys, selectedKeys, setOpenKeys, setSelectedKeys } = useNavStore()\n\n const onOpenChange = useCallback(\n (keys: string[]) => {\n const latestOpenKey = keys?.find(key => openKeys?.indexOf(key) === -1)\n const match = flattenItems.find(item => latestOpenKey === item.key)\n setOpenKeys((match?.keypath ?? [latestOpenKey]) as string[])\n },\n [flattenItems, openKeys, setOpenKeys],\n )\n\n useEffect(() => {\n const match = flattenItems.find(item => location.pathname === item.route)\n\n if (match) {\n const key = match.key as string\n const keypath = match.keypath as string[]\n setSelectedKeys([key])\n setOpenKeys(keypath)\n }\n }, [flattenItems, location, setOpenKeys, setSelectedKeys])\n\n return (\n <Menu\n style={{ borderRight: 'none' }}\n items={internalItems}\n mode=\"inline\"\n openKeys={openKeys}\n selectedKeys={selectedKeys}\n onOpenChange={onOpenChange}\n />\n )\n}\n\nNavMenu.displayName = 'NavMenu'\n\nexport default NavMenu\n","import { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nexport interface NavState {\n openKeys: string[]\n selectedKeys: string[]\n setOpenKeys: (keys: string[]) => void\n setSelectedKeys: (keys: string[]) => void\n}\n\nexport const useNavStore = create<NavState>()(\n persist(\n set => ({\n openKeys: [],\n setOpenKeys: keys => set({ openKeys: keys }),\n selectedKeys: [],\n setSelectedKeys: keys => set({ selectedKeys: keys }),\n }),\n {\n name: 'nav',\n storage: createJSONStorage(() => localStorage),\n partialize: state => ({\n openKeys: state.openKeys,\n selectedKeys: state.selectedKeys,\n }),\n },\n ),\n)\n","import type { FC } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport { Dropdown, Space } from 'antd'\nimport Link from 'antd/es/typography/Link'\nimport { LogoutOutlined, UserOutlined } from '@ant-design/icons'\nimport { useTranslation } from '@/utils/i18n'\nimport { useTokenStore } from '@/stores/token'\n\nconst UserWidget: FC = () => {\n const navigate = useNavigate()\n const { clearToken, getUser } = useTokenStore()\n const user = getUser()\n const t = useTranslation()\n\n return (\n <Dropdown\n menu={{\n selectable: true,\n items: [\n {\n key: '1',\n label: (\n <Link\n onClick={() => {\n clearToken()\n navigate('/login')\n }}\n >\n {t('UserWidget.logoutText')}\n </Link>\n ),\n icon: <LogoutOutlined />,\n },\n ],\n }}\n placement=\"bottomRight\"\n >\n <Link>\n <Space align=\"center\">\n <span>{user?.authorityId}</span>\n <UserOutlined style={{ fontSize: '16px' }} />\n </Space>\n </Link>\n </Dropdown>\n )\n}\n\nexport default UserWidget\n","import { Card, Empty } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { useTranslation } from '@/utils/i18n'\nimport { useGameStore } from '@/components/GameSelect'\nimport { useToolkitsContext } from '@/components/ContextProvider'\n\nconst RequireGame: FC<PropsWithChildren> = props => {\n const { children } = props\n const { usePermissionApiV2, hideGameSelect } = useToolkitsContext()\n const { game } = useGameStore()\n const t = useTranslation()\n\n if (usePermissionApiV2 && !hideGameSelect) {\n if (game) {\n // 切换游戏时,重新渲染 children\n return <div key={game.id}>{children}</div>\n } else {\n return (\n <Card>\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={t('RequireGame.description')} />\n </Card>\n )\n }\n }\n\n return children\n}\n\nexport default RequireGame\n","import { Result, Spin } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { useTranslation } from '@/utils/i18n'\nimport { usePermission } from '@/hooks/permission'\n\nexport interface PermissionGuardProps {\n code: string\n}\n\nconst PermissionGuard: FC<PropsWithChildren<PermissionGuardProps>> = props => {\n const { code, children } = props\n const { accessible, isValidating } = usePermission(code)\n const t = useTranslation()\n\n if (isValidating) {\n return (\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 200,\n }}\n />\n )\n }\n\n if (!accessible) {\n return <Result status=\"403\" subTitle={t('noEntitlement')} />\n }\n\n return <>{children}</>\n}\n\nexport default PermissionGuard\n","import { lazy } from 'react'\nimport type { RouteObject } from 'react-router-dom'\n\nconst Login = lazy(() => import('./Login'))\nconst NotFound = lazy(() => import('./NotFound'))\n\nconst routes: RouteObject = {\n children: [\n {\n path: 'login',\n element: <Login />,\n },\n {\n path: '*',\n element: <NotFound />,\n },\n ],\n}\n\nexport default routes\n","import { lazy } from 'react'\nimport type { RouteObject } from 'react-router-dom'\nimport { Navigate } from 'react-router-dom'\n\nconst UserList = lazy(() => import('./UserList'))\nconst RoleList = lazy(() => import('./RoleList'))\nconst RoleDetail = lazy(() => import('./RoleDetail'))\n\nconst routes: RouteObject[] = [\n {\n path: 'permission',\n children: [\n {\n index: true,\n element: <Navigate relative=\"path\" to=\"user\" />,\n },\n {\n path: 'user',\n element: <UserList />,\n },\n {\n path: 'role',\n element: <RoleList />,\n },\n {\n path: 'role/:name',\n element: <RoleDetail />,\n },\n ],\n },\n]\n\nexport default routes\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@7.2.0_postcss@8.4.27_typescript@5.1.6/node_modules/tsup/assets/esm_shims.js","../src/components/ContextProvider/index.tsx","../src/locales/en_GB.ts","../src/utils/i18n.ts","../src/components/FilterFormWrapper/index.tsx","../src/utils/storage.ts","../src/utils/request.ts","../src/stores/token.ts","../src/components/GameSelect/index.tsx","../src/components/Highlight/index.tsx","../src/hooks/permission.ts","../src/components/PermissionButton/index.tsx","../src/stores/queryList.ts","../src/components/QueryList/index.tsx","../src/hooks/formModal.tsx","../src/constants/index.ts","../src/routes/base/Login/default.tsx","../src/routes/base/Login/index.tsx","../src/routes/base/NotFound/index.tsx","../src/features/permission/hooks/index.ts","../src/features/permission/components/PermissionCollapse/index.tsx","../src/features/permission/components/PermissionListV1/index.tsx","../src/features/permission/components/PermissionListV2/index.tsx","../src/features/permission/components/PermissionList/index.tsx","../src/features/permission/types/index.ts","../src/features/permission/index.ts","../src/routes/permission/UserList/index.tsx","../src/routes/permission/RoleList/index.tsx","../src/routes/permission/RoleDetail/index.tsx","../src/index.ts","../src/components/DynamicTags/index.tsx","../src/components/Layout/index.tsx","../src/components/NavMenu/index.tsx","../src/components/NavMenu/store.ts","../src/components/UserWidget/index.tsx","../src/components/RequireGame/index.tsx","../src/components/PermissionGuard/index.tsx","../src/routes/base/index.tsx","../src/routes/permission/index.tsx"],"names":["init_esm_shims","__esmMin","createContext","useContext","create","useStore","jsx","useToolkitsContext","ToolkitsContext","defaultState","contextStore","ContextProvider","ContextProvider_default","init_ContextProvider","_a","_b","children","props","__objRest","parentConfig","config","__spreadValues","locale","en_GB_default","init_en_GB","get","has","template","useTranslation","key","data","init_i18n","Button","Space","theme","jsxs","FilterFormWrapper","FilterFormWrapper_default","init_FilterFormWrapper","confirmText","extras","onConfirm","onReset","token","t","formStyle","item","mixedStorage","init_storage","name","value","__async","pick","qs","request","url","opts","body","params","headers","responseType","isGlobalNS","rest","parsed","queryParams","options","queryString","useTokenStore","game","useGameStore","__spreadProps","response","RequestError","commonResponse","json","init_request","init_GameSelect","init_token","persist","jwtDecode","useNavigate","useEffect","useState","useSWRImmutable","useValidateToken","navigate","clearToken","validated","setValidated","usePermissionApiV2","err","set","store","_","state","Select","Typography","useCallback","useMemo","createJSONStorage","useSWRConfig","useGames","user","isLoading","Text","GameSelect","GameSelect_default","gameFilter","setGame","games","mutate","clearCache","onGameChange","id","matchGame","flushSync","createRoot","renderToString","node","container","root","resolve","splitByTags","Highlight","Highlight_default","init_Highlight","str","regex","part","texts","htmlString","setHtmlString","result","text","index","useSWR","usePermissions","codes","isValidating","acc","curr","usePermission","code","init_permission","Tooltip","PermissionButton","PermissionButton_default","init_PermissionButton","showLoading","restProps","accessible","useQueryListStore","init_queryList","payload","_c","keyMap","paginationMap","swrKey","page","size","Form","Result","Spin","Table","forwardRef","useImperativeHandle","useRef","QueryListAction","fallbackData","InternalQueryList","QueryList","QueryList_default","init_QueryList","ref","noPagination","extra","renderForm","transformArg","transformResponse","afterSuccess","tableProps","form","action","formValues","setFormValues","isValid","setIsValid","setResponse","_mutate","args","refreshInterval","isDataLoading","isDataValidating","_response","list","onPaginationChange","currentPage","currentSize","pagination","refetch","values","Modal","useFormModal","content","onCancel","modal","contextHolder","defaultProps","scopedProps","initialValues","extraValues","restScopedProps","onOk","init_formModal","SSO_URL","init_constants","Default","default_default","init_default","Login_exports","__export","Login_default","AliyunOutlined","Alert","Card","Col","Divider","Row","Navigate","useLocation","useSearchParams","Title","Login","init_Login","searchParams","location","setToken","localeDropdownMenu","NotFound_exports","NotFound_default","NotFound","init_NotFound","useSWRMutation","useAllPermissions","useAllPermissionsV2","useAllRoles","useRole","useCreateRole","arg","useUpdateRole","useRemoveRole","useCreateUser","useUpdateUser","useRemoveUser","init_hooks","Checkbox","Collapse","PermissionCollapse","PermissionCollapse_default","init_PermissionCollapse","permissions","readonly","expand","onChange","activeKey","setActiveKey","checkedMap","setCheckedMap","internalValue","setInternalValue","onCollapseChange","getCheckedValue","checkedValue","tempValue","onCheckChange","e","category","permission","Skeleton","PermissionListV1","PermissionListV1_default","init_PermissionListV1","error","Empty","Option","PermissionListV2","PermissionListV2_default","init_PermissionListV2","gameList","setGameList","globalPermissions","gamePermissions","addGame","prev","removeGame","i","newValue","selectedValue","pev","temp","gameId","Fragment","PermissionList","PermissionList_default","init_PermissionList","init_types","UserList_exports","UserList_default","UserAddOutlined","App","Input","Tag","produce","Link","useCreatingUserModal","message","roles","role","useUpdatingUserModal","update","draft","match","UserList","init_UserList","remove","showCreatingModal","creatingContextHolder","showUpdatingModal","updatingContextHolder","columns","List","Total","RoleList_exports","RoleList_default","UsergroupAddOutlined","useUpdatingRoleModal","RoleList","init_RoleList","_form","viewable","RoleDetail_exports","RoleDetail_default","Breadcrumb","Descriptions","useParams","RoleDetail","init_RoleDetail","PlusOutlined","DynamicTags","initialTags","addable","removable","addCallback","removeCallback","tags","setTags","inputVisible","setInputVisible","inputValue","setInputValue","editInputIndex","setEditInputIndex","editInputValue","setEditInputValue","inputRef","editInputRef","handleClose","removedTag","newTags","tag","showInput","handleInputChange","handleInputConfirm","handleEditInputChange","handleEditInputConfirm","tagInputStyle","tagPlusStyle","DynamicTags_default","Antd","Suspense","logo","Menu","useNavStore","keys","withLink","label","route","transformItems","items","isPass","flatItems","keypath","_keys","NavMenu","menuItems","flattenItems","internalItems","openKeys","selectedKeys","setOpenKeys","setSelectedKeys","onOpenChange","latestOpenKey","NavMenu_default","Dropdown","LogoutOutlined","UserOutlined","UserWidget","getUser","UserWidget_default","RequireGame","hideGameSelect","RequireGame_default","Header","Sider","Content","Layout","colorBgContainer","colorBorder","title","Layout_default","PermissionGuard","PermissionGuard_default","lazy","routes","base_default","permission_default"],"mappings":"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AAO,OAAO,MAAM,SAAS,EAAE,SAAS,EAAE,QAAQ,GACzE,EACAA,EAAC,QACC,KAAK,UACL,EAAE,8JACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,2aACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,sGACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,QACC,KAAK,UACL,UAAU,wCACV,OAAO,OACP,MAAM,SACN,EAAE,UACF,EAAE,SACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,sFACR,EACDA,EAAC,KAAE,QAAQ,KACT,SAAAA,EAAC,QACC,KAAK,UACL,EAAE,6LACH,EACH,EACAA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6UACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,kMACR,EACDA,EAAC,WAAQ,KAAK,UAAU,OAAO,0DAA0D,EACzF6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,gTACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0WACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,qNACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0RACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,4NACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,iFACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,8IACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6TACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,sKACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,4LACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,kmBACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6EACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,2FACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oHACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,yGACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0FACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,6NACH,EACD6B,EAAC,KACC,UAAAA,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,iEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,iEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,2EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,iEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,2EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,GACF,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,iUACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wTACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,yVACH,GACH,GACF,EACAA,EAAC,WACC,KAAK,UACL,OAAO,yEACR,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,oIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oIACH,GACH,EACAA,EAAC,QACC,KAAK,UACL,EAAE,6JACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,kfACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6JACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,yGACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,OACL,OAAO,wEACR,EACDA,EAAC,WACC,KAAK,OACL,OAAO,qEACR,EACDA,EAAC,QACC,KAAK,OACL,EAAE,2HACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,kIACH,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,OACL,OAAO,qEACR,EACDA,EAAC,WAAQ,KAAK,OAAO,OAAO,kEAAkE,EAC9FA,EAAC,QACC,KAAK,OACL,EAAE,gIACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,wHACH,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,OACL,OAAO,uEACR,EACDA,EAAC,WACC,KAAK,OACL,OAAO,uEACR,EACDA,EAAC,QACC,KAAK,OACL,EAAE,oIACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,uIACH,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,qKACH,EACD6B,EAAC,KACC,UAAAA,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACD6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6FACH,GACH,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,8FACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,8FACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,qEACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,GACH,GACF,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,wLACH,EACDA,EAAC,QAAK,KAAK,UAAU,OAAO,MAAM,MAAM,QAAQ,EAAE,SAAS,EAAE,SAAS,EACtEA,EAAC,QAAK,KAAK,UAAU,OAAO,MAAM,MAAM,QAAQ,EAAE,SAAS,EAAE,QAAQ,EACrEA,EAAC,QAAK,KAAK,UAAU,OAAO,MAAM,MAAM,QAAQ,EAAE,SAAS,EAAE,SAAS,EACtEA,EAAC,QACC,KAAK,OACL,EAAE,gFACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,mGACH,EACDA,EAAC,WACC,KAAK,UACL,OAAO,kEACR,EACDA,EAAC,WAAQ,KAAK,UAAU,OAAO,iEAAiE,EAChG6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,gFACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,4HACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,uEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,sEACR,GACH,EACAA,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,0PACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uKACH,GACH,EACAA,EAAC,WACC,KAAK,UACL,OAAO,0JACR,GACH,GACF,EACA6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,oVACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,mLACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,2EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,2EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,0EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,4EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,6EACR,GACH,EACAA,EAAC,QACC,KAAK,UACL,EAAE,kJACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,kJACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,kJACH,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,yNACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,gSACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0VACH,GACH,GACF,GACF,EACA6B,EAAC,KACC,UAAAA,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,mdACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,2WACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,sTACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,+NACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0LACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uVACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wQACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,yKACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,iFACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,8JACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wHACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oSACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uHACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,+KACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,oKACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,yNACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,mFACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,mFACH,GACH,EACA6B,EAAC,KACC,UAAA7B,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,WACC,KAAK,UACL,OAAO,sEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0GACH,GACH,GACF,EACAA,EAAC,WACC,KAAK,OACL,OAAO,uEACR,EACD6B,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,oMACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,6IACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,wNACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,sMACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,uMACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,iLACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,+YACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,mIACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,2IACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,kKACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,0GACH,EACD6B,EAAC,KACC,UAAAA,EAAC,KACC,UAAA7B,EAAC,QACC,KAAK,UACL,EAAE,6GACH,EACDA,EAAC,QACC,KAAK,OACL,EAAE,mIACH,EACDA,EAAC,WACC,KAAK,OACL,OAAO,wEACR,GACH,EACAA,EAAC,WACC,KAAK,UACL,OAAO,wEACR,EACDA,EAAC,QACC,KAAK,UACL,EAAE,4HACH,GACH,EACAA,EAAC,QACC,KAAK,UACL,EAAE,0LACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,+QACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,gGACH,EACDA,EAAC,QACC,KAAK,UACL,EAAE,kHACH,GACH,EACAA,EAAC,QAAK,KAAK,UAAU,OAAO,QAAQ,MAAM,SAAS,EAAE,SAAS,EAAE,UAAU,EAC1EA,EAAC,QAAK,KAAK,UAAU,GAAG,OAAO,GAAG,OAAO,OAAO,OAAO,MAAM,OAAO,EAAE,UAAU,GAClF,EACF,EACF,GACF,EAIGmN,GAAQD,KC/1Bf,IAAAG,GAAA,GAAAC,GAAAD,GAAA,aAAAE,KACA,OAAS,kBAAAC,OAAsB,oBAC/B,OAAS,SAAAC,GAAO,UAAA/L,GAAQ,QAAAgM,GAAM,OAAAC,GAAK,WAAAC,GAAS,OAAAC,GAAK,SAAAlM,GAAO,cAAA+D,OAAkB,OAE1E,OAAS,YAAAoI,GAAU,eAAAC,GAAa,mBAAAC,OAAuB,mBACvD,OAAOnJ,OAAqB,gBA6BjB,cAAA7E,EAmBC,QAAA6B,OAnBD,oBAlCX,IAYQoM,GAEFC,GAiECX,GA/EPY,GAAAxO,EAAA,kBAAAD,IAAAuN,KAMAG,KACA7I,KACAF,IACA5C,IACAlB,KAEM,CAAE,MAAA0N,IAAUvI,IAEZwI,GAA+BvN,GAAS,CAd9C,IAAAH,EAeE,GAAM,CAAE,SAAAE,CAAS,EAAIC,EACf,CAACyN,CAAY,EAAIJ,GAAgB,EACjCK,EAAWN,GAAY,EACvB,CAAE,MAAA1L,EAAO,SAAAiM,CAAS,EAAIzK,EAAc,EACpCvB,EAAIhB,EAAe,EACnB,CAAE,mBAAAiN,CAAmB,EAAItO,EAAmB,EAalD,OAXA4E,GACEuJ,EAAa,IAAI,QAAQ,EAAI,kCAAkCA,EAAa,IAAI,QAAQ,CAAC,GAAK,KAC9FnL,GAAOD,EAA2BC,CAAG,EACrC,CACE,SAAU,GACV,UAAWzB,GAAQ,CACjB8M,EAAS9M,EAAK,KAAK,KAAK,CAC1B,CACF,CACF,EAEIa,EACKrC,EAAC8N,GAAA,CAAS,QAAO,GAAC,GAAG,IAAI,EAIhCjM,GAACgM,GAAA,CACE,UAAAU,GAAsBvO,EAAC,OAAI,UAAU,sBAAuB,SAAAuO,EAAmB,EAChFvO,EAAC2N,GAAA,CAAI,KAAM,GAAI,OAAQ,EACrB,SAAA3N,EAAC,OAAI,UAAU,yCACb,SAAAA,EAACmN,GAAA,EAAQ,EACX,EACF,EACAnN,EAAC2N,GAAA,CAAI,KAAM,EAAG,OAAQ,EACpB,SAAA3N,EAAC,OAAI,UAAU,oBACb,SAAA6B,GAAC6L,GAAA,CAAK,UAAS,GAAC,UAAU,mDACvB,YAAAlN,EAAA6N,EAAS,QAAT,YAAA7N,EAAgB,UACfR,EAAC,OAAI,UAAU,kCACb,SAAAA,EAACyN,GAAA,CAAM,OAAM,GAAC,SAAQ,GAAC,QAASnL,EAAE,qBAAqB,EAAG,KAAK,QAAQ,EACzE,EAEFT,GAAC,OAAI,UAAU,mBACb,UAAA7B,EAACiO,GAAA,CAAM,MAAO,EAAI,SAAA3L,EAAE,aAAa,EAAE,EACnCtC,EAAC,OAAI,UAAU,WAAY,SAAAU,EAAS,GACtC,EACAV,EAAC4N,GAAA,CAAQ,MAAK,GAAE,SAAAtL,EAAE,kBAAkB,EAAE,EACtCtC,EAAC,OAAI,UAAU,6BACb,SAAAA,EAAC2B,GAAA,CAAM,KAAK,QACV,SAAA3B,EAAC0B,GAAA,CACC,KAAK,OACL,KAAK,QACL,MAAM,QACN,KAAM1B,EAACwN,GAAA,EAAe,EACtB,KAAM,GAAGR,EAAO,kBAAkB,mBAAmB,OAAO,SAAS,MAAM,CAAC,SAC5E,OAAO,QAEN,SAAA1K,EAAE,sBAAsB,EAC3B,EACF,EACF,GACF,EACF,EACF,GACF,CAEJ,EAEOiL,GAAQW,KC/Ef,IAAAM,GAAA,GAAAlB,GAAAkB,GAAA,aAAAC,KAAA,OAAS,UAAA/M,GAAQ,UAAAiI,OAAc,OAC/B,OAAS,eAAAjF,OAAmB,mBAalB,cAAA1E,OAAA,oBAdV,IAIM0O,GAwBCD,GA5BPE,GAAAhP,EAAA,kBAAAD,IAEA+B,IAEMiN,GAAW,IAAM,CACrB,IAAM3J,EAAWL,GAAY,EACvB,EAAIpD,EAAe,EACzB,OACEtB,GAAC,OAAI,UAAU,4CACb,SAAAA,GAAC2J,GAAA,CACC,OAAO,MACP,MAAM,MACN,SAAU,EAAE,mBAAmB,EAC/B,MACE3J,GAAC0B,GAAA,CACC,KAAK,UACL,QAAS,IAAM,CACbqD,EAAS,GAAG,CACd,EAEC,WAAE,qBAAqB,EAC1B,EAEJ,EACF,CAEJ,EAEO0J,GAAQC,KC5Bf,OAAOzG,OAAY,MACnB,OAAO2G,OAAoB,eAOpB,SAASC,IAAoB,CAClC,OAAO5G,GAAO,kCAAmChF,GAC/CD,EAA8BC,EAAK,CAAE,WAAY,EAAK,CAAC,EAAE,KAAKgB,GAAYA,EAAS,IAAI,CACzF,CACF,CAEO,SAAS6K,IAAsB,CACpC,OAAO7G,GAAO,qCAAsChF,GAClDD,EAGGC,EAAK,CAAE,WAAY,EAAK,CAAC,EAAE,KAAKgB,GAAYA,EAAS,IAAI,CAC9D,CACF,CAEO,SAAS8K,IAAc,CAC5B,GAAM,CAAE,WAAA/F,CAAW,EAAIT,EAAc,SAAU,CAAE,WAAY,EAAK,CAAC,EACnE,OAAON,GAAOe,EAAa,wBAA0B,KAAM/F,GACzDD,EAAwBC,EAAK,CAAE,WAAY,EAAK,CAAC,EAAE,KAAKgB,GAAYA,EAAS,IAAI,CACnF,CACF,CAEO,SAAS+K,GAAQrM,EAAc,CACpC,GAAM,CAAE,mBAAAwC,CAAmB,EAAIlF,EAAmB,EAClD,OAAOgI,GAAO,qBAAqB9C,EAAqB,SAAW,MAAM,SAASxC,CAAI,GAAKM,GACzFD,EAAyBC,EAAK,CAAE,WAAY,EAAK,CAAC,EAAE,KAAKgB,GAAYA,EAAS,IAAI,CACpF,CACF,CAEO,SAASgL,IAAgB,CAC9B,GAAM,CAAE,mBAAA9J,CAAmB,EAAIlF,EAAmB,EAElD,OAAO2O,GACLzJ,EAAqB,6BAA+B,2BACpD,CACElC,EACA,CACE,IAAAiM,CACF,IAIAlM,EAAQC,EAAK,CACX,OAAQ,OACR,KAAMiM,EACN,WAAY,EACd,CAAC,CACL,CACF,CAEO,SAASC,IAAgB,CAC9B,GAAM,CAAE,mBAAAhK,CAAmB,EAAIlF,EAAmB,EAElD,OAAO2O,GACLzJ,EAAqB,6BAA+B,2BACpD,CACElC,EACA,CACE,IAAAiM,CACF,IAIAlM,EAAQC,EAAK,CACX,OAAQ,OACR,KAAMiM,EACN,WAAY,EACd,CAAC,CACL,CACF,CAEO,SAASE,IAAgB,CAC9B,OAAOR,GACL,2BACA,CACE3L,EACA,CACE,IAAAiM,CACF,IAIAlM,EAAQC,EAAK,CACX,OAAQ,OACR,KAAMiM,EACN,WAAY,EACd,CAAC,CACL,CACF,CAEO,SAASG,IAAgB,CAC9B,OAAOT,GACL,2BACA,CACE3L,EACA,CACE,IAAAiM,CACF,IAIAlM,EAAQC,EAAK,CACX,OAAQ,OACR,KAAMiM,EACN,WAAY,EACd,CAAC,CACL,CACF,CAEO,SAASI,IAAgB,CAC9B,OAAOV,GACL,2BACA,CACE3L,EACA,CACE,IAAAiM,CACF,IAIAlM,EAAQC,EAAK,CACX,OAAQ,OACR,KAAMiM,EACN,WAAY,EACd,CAAC,CACL,CACF,CAEO,SAASK,IAAgB,CAC9B,OAAOX,GACL,2BACA,CACE3L,EACA,CACE,IAAAiM,CACF,IAIAlM,EAAQC,EAAK,CACX,OAAQ,OACR,KAAMiM,EACN,WAAY,EACd,CAAC,CACL,CACF,CAzJA,IAAAM,GAAA7P,EAAA,kBAAAD,IAIA+I,IACAlI,IACA8D,MCJA,OAAS,YAAAoL,GAAU,OAAA9B,GAAK,YAAA+B,GAAU,OAAA7B,OAAW,OAG7C,OAAS,eAAAlI,GAAa,aAAAhB,GAAW,YAAAC,OAAgB,QA6EvC,cAAA5E,OAAA,oBAlFV,IAeM2P,GAuGCC,GAtHPC,GAAAlQ,EAAA,kBAAAD,IACA+B,IAcMkO,GAAkDhP,GAAS,CAC/D,GAAM,CAAE,YAAAmP,EAAa,SAAAC,EAAU,OAAAC,EAAQ,MAAApN,EAAO,SAAAqN,CAAS,EAAItP,EACrD,CAACuP,EAAWC,CAAY,EAAIvL,GAAmB,CAAC,CAAC,EACjD,CAACwL,EAAYC,CAAa,EAAIzL,GAAkC,CAAC,CAAC,EAClE,CAAC0L,EAAeC,CAAgB,EAAI3L,GAAmBhC,GAAA,KAAAA,EAAS,CAAC,CAAC,EAClEN,EAAIhB,EAAe,EAEnBkP,EAAmB7K,GAAapE,GAA2B,CAC/D4O,EAAa5O,CAAe,CAC9B,EAAG,CAAC,CAAC,EAECkP,EAAkB,CAACC,EAAuBvI,IAAoB,CAClE,IAAIwI,EAAsB,CAAC,EAE3B,OAAID,EACFC,EAAY,CAAC,GAAG,IAAI,IAAIL,EAAc,OAAOnI,CAAK,CAAC,CAAC,GAEpDwI,EAAYL,EAAc,MAAM,EAEhCnI,EAAM,QAAQK,GAAQ,CACpB,IAAMR,EAAQ2I,EAAU,UAAUnO,GAAQA,IAASgG,CAAI,EACnDR,EAAQ,IACV2I,EAAU,OAAO3I,EAAO,CAAC,CAE7B,CAAC,GAGI2I,CACT,EAEMC,EAAgB,CAACC,EAAwB1I,IAAoB,CACjE,IAAMuI,EAAeD,EAAgBI,EAAE,OAAO,QAAS1I,CAAK,EAC5DoI,EAAiBG,CAAY,EAC7BT,GAAA,MAAAA,EAAWS,EACb,EAEA,OAAA/L,GAAU,IAAM,CACd4L,EAAiB3N,GAAA,KAAAA,EAAS,CAAC,CAAC,CAC9B,EAAG,CAACA,CAAK,CAAC,EAEV+B,GAAU,IAAM,CACVqL,GACFG,GAAcL,GAAA,KAAAA,EAAe,CAAC,GAAG,IAAI,CAAC,CAAE,SAAAgB,CAAS,IAAMA,CAAQ,CAAC,CAEpE,EAAG,CAACd,EAAQF,CAAW,CAAC,EAExBnL,GAAU,IAAM,CACd,IAAM+L,GAAgBZ,GAAA,KAAAA,EAAe,CAAC,GAAG,OACvC,CAACzH,EAAKC,KACJD,EAAIC,EAAK,QAAQ,EAAIA,EAAK,YAAY,MAAM9F,GAAQ8N,GAAA,YAAAA,EAAe,SAAS9N,EAAK,MAAM,EAChF6F,GAET,CAAC,CACH,EAEAgI,EAAcK,CAAY,CAC5B,EAAG,CAACJ,EAAeR,CAAW,CAAC,EAG7B9P,GAAC0P,GAAA,CACC,MAAO,CAAE,MAAO,MAAO,EACvB,YAAY,SACZ,UAAWQ,EACX,OAAQJ,GAAA,KAAAA,EAAe,CAAC,GAAG,IAAItN,IAAS,CACtC,IAAKA,EAAK,SACV,MAAOA,EAAK,SACZ,MAAO,CAACuN,GACN/P,GAACyP,GAAA,CACC,QAASW,EAAW5N,EAAK,QAAQ,EACjC,SAAUqO,GAAK,CACbD,EACEC,EACArO,EAAK,YAAY,IAAIuO,GAAcA,EAAW,KAAK,CACrD,CACF,EAEC,SAAAzO,EAAE,WAAW,EAChB,EAEF,SACEtC,GAACyP,GAAS,MAAT,CAAe,MAAO,CAAE,MAAO,MAAO,EAAG,MAAOa,EAAe,SAAUP,EACxE,SAAA/P,GAAC6N,GAAA,CAAI,OAAQ,CAAC,GAAI,EAAE,EAAG,MAAO,CAAE,MAAO,MAAO,EAC3C,SAAArL,EAAK,YAAY,IAAIuO,GACpB/Q,GAAC2N,GAAA,CAA2B,KAAM,EAChC,SAAA3N,GAACyP,GAAA,CACC,MAAOsB,EAAW,MAClB,SAAUF,GAAK,CACbD,EAAcC,EAAG,CAACE,EAAW,KAAK,CAAC,CACrC,EAEC,SAAAA,EAAW,MACd,GARQA,EAAW,KASrB,CACD,EACH,EACF,CAEJ,EAAE,EACF,SAAUP,EACZ,CAEJ,EAEOZ,GAAQD,KCtHf,OAAS,YAAAqB,GAAU,cAAAtL,OAAkB,OAuB7B,cAAA1F,OAAA,oBAvBR,IAQQkG,GAOF+K,GA0BCC,GAzCPC,GAAAxR,EAAA,kBAAAD,IACA8P,KACAK,KAIApO,KAEM,CAAE,KAAAyE,IAASR,IAOXuL,GAA8CtQ,GAAS,CAC3D,GAAM,CAAE,OAAAqP,EAAS,GAAM,MAAApN,EAAO,SAAAmN,EAAU,SAAAE,CAAS,EAAItP,EAC/C,CAAE,KAAMmP,EAAa,UAAA7J,EAAW,MAAAmL,CAAM,EAAIvC,GAAkB,EAC5DvM,EAAIhB,EAAe,EAEzB,OAAI8P,EAEApR,GAAC,OAAI,UAAU,sBACb,SAAAA,GAACkG,GAAA,CAAK,KAAK,SAAU,SAAA5D,EAAE,kCAAkC,EAAE,EAC7D,EAKFtC,GAACgR,GAAA,CAAS,OAAM,GAAC,QAAS/K,EACxB,SAAAjG,GAAC4P,GAAA,CACC,MAAOhN,EACP,YAAakN,EACb,SAAUC,EACV,OAAQC,EACR,SAAUC,EACZ,EACF,CAEJ,EAEOiB,GAAQD,KCzCf,OAAS,UAAAvP,GAAQ,QAAAgM,GAAM,WAAAE,GAAS,SAAAyD,GAAO,UAAA5L,GAAQ,YAAAuL,GAAU,SAAArP,GAAO,cAAA+D,OAAkB,OAElF,OAAS,aAAAf,GAAW,YAAAC,OAAgB,QAsC5B,cAAA5E,EAsCI,QAAA6B,OAtCJ,oBAxCR,IASQqE,GACAoL,GAOFC,GAoICC,GArJPC,GAAA9R,EAAA,kBAAAD,IAIA8P,KACAK,KAEApO,KAEM,CAAE,KAAAyE,IAASR,IACX,CAAE,OAAA4L,IAAW7L,GAOb8L,GAA8C5Q,GAAS,CAC3D,GAAM,CAAE,OAAAqP,EAAS,GAAM,MAAApN,EAAO,SAAAmN,EAAU,SAAAE,CAAS,EAAItP,EAC/C,CAAE,KAAM,CAAE,WAAAoQ,EAAY,KAAMxK,CAAM,EAAI,CAAC,EAAG,UAAAN,EAAW,MAAAmL,CAAM,EAAItC,GAAoB,EACnF,CAAC4C,EAAUC,CAAW,EAAI/M,GAAsD,CAAC,CAAC,EAClFgN,EAAoBb,GAAA,YAAAA,EAAY,OAAOvO,GAAQA,EAAK,WACpDqP,EAAkBd,GAAA,YAAAA,EAAY,OAAOvO,GAAQ,CAACA,EAAK,WACnDF,EAAIhB,EAAe,EAczB,GAZAqD,GAAU,IAAM,CACd,IAAMiH,EAAoD,CAAC,EAE3D,OAAO,KAAKhJ,GAAA,KAAAA,EAAS,CAAC,CAAC,EAAE,QAAQrB,GAAO,CA5B5C,IAAAf,EA6BUe,IAAQ,UACVqK,EAAK,KAAK,CAAE,OAAQrK,EAAK,aAAaf,EAAAoC,GAAA,YAAAA,EAAQrB,KAAR,KAAAf,EAAgB,CAAC,CAAE,CAAC,CAE9D,CAAC,EAEDmR,EAAY/F,CAAI,CAClB,EAAG,CAAChJ,CAAK,CAAC,EAENwO,EACF,OACEpR,EAAC,OAAI,UAAU,sBACb,SAAAA,EAACkG,GAAA,CAAK,KAAK,SAAU,SAAA5D,EAAE,kCAAkC,EAAE,EAC7D,EAIJ,IAAMwP,EAAU,IAAM,CACpBH,EAAYI,GAAQ,CAAC,GAAGA,EAAM,CAAE,OAAQ,GAAI,YAAa,CAAC,CAAE,CAAC,CAAC,CAChE,EAEMC,EAAchK,GAAkB,CACpC2J,EAAYI,GAAQA,EAAK,OAAO,CAACxM,EAAG0M,IAAMA,IAAMjK,CAAK,CAAC,CACxD,EAEA,OACEnG,GAAC,OAAI,UAAU,uBACb,UAAA7B,EAAC,OAAI,UAAU,QACb,SAAAA,EAAC4N,GAAA,CAAQ,OAAM,GAAE,SAAAtL,EAAE,iCAAiC,EAAE,EACxD,EACAtC,EAACgR,GAAA,CAAS,OAAM,GAAC,QAAS/K,EACxB,SAAAjG,EAAC4P,GAAA,CACC,MAAOhN,GAAA,YAAAA,EAAO,OACd,SAAUmN,EACV,YAAa6B,EACb,OAAQ5B,EACR,SAAUkC,GAAY,CACpBjC,GAAA,MAAAA,EAAWjM,EAAAjD,EAAA,GACN6B,GADM,CAET,OAAQsP,CACV,GACF,EACF,EACF,EACAlS,EAAC,OAAI,UAAU,QACb,SAAAA,EAAC4N,GAAA,CAAQ,OAAM,GAAE,SAAAtL,EAAE,iCAAiC,EAAE,EACxD,EACCoP,EAAS,IAAI,CAAClP,EAAMwF,IAAO,CA3ElC,IAAAxH,EA4EQ,OAAAR,EAAC0N,GAAA,CACC,MACE7L,GAACF,GAAA,CACC,UAAA3B,EAACkG,GAAA,CAAM,SAAA5D,EAAE,MAAM,EAAE,EAChByN,EACC/P,EAACkG,GAAA,CAAM,UAAA1F,EAAA+F,GAAA,YAAAA,EAAO,KAAKzC,GAAQA,EAAK,KAAOtB,EAAK,UAArC,YAAAhC,EAA8C,KAAK,EAE1DR,EAACyF,GAAA,CACC,SAAUsK,EACV,MAAO2B,EAAS1J,CAAK,EAAE,QAAU,OACjC,MAAO,CAAE,MAAO,OAAQ,EACxB,YAAa1F,EAAE,sCAAsC,EACrD,SAAU6P,GAAiB,CACzBR,EAAYS,GAAO,CACjB,IAAMC,EAAOD,EAAI,MAAM,EACvB,OAAAC,EAAKrK,CAAK,EAAE,OAASmK,EACdE,CACT,CAAC,CACH,EAEC,SAAA9L,GAAA,YAAAA,EAAO,IAAIzC,GACV9D,EAACsR,GAAA,CAAqB,MAAOxN,EAAK,GAAI,SAAU4N,EAAS,KAAK,CAAC,CAAE,OAAAY,CAAO,IAAMA,IAAWxO,EAAK,EAAE,EAC7F,SAAAA,EAAK,MADKA,EAAK,EAElB,GAEJ,GAEJ,EAGF,UAAU,OACV,MACE,CAACiM,GACC/P,EAAC0B,GAAA,CACC,KAAK,OACL,QAAS,IAAM,CACbsQ,EAAWhK,CAAK,CAClB,EAEC,SAAA1F,EAAE,2BAA2B,EAChC,EAIH,SAAAoP,EAAS1J,CAAK,EAAE,OACfhI,EAACgR,GAAA,CAAS,OAAM,GAAC,QAAS/K,EACxB,SAAAjG,EAAC4P,GAAA,CACC,MAAOhN,GAAA,YAAAA,EAAQ8O,EAAS1J,CAAK,EAAE,QAC/B,SAAU+H,EACV,OAAQC,EACR,YAAa6B,EACb,SAAUK,GAAY,CACpBjC,GAAA,MAAAA,EAAWjM,EAAAjD,EAAA,GACN6B,GADM,CAET,CAAC8O,EAAS1J,CAAK,EAAE,MAAM,EAAGkK,CAC5B,GACF,EACF,EACF,EAEAlS,EAACqR,GAAA,CAAM,YAAa/O,EAAE,uCAAuC,EAAG,GA/B7D0F,CAiCP,EACD,EACA,CAAC+H,GACA/P,EAAC0B,GAAA,CAAO,MAAK,GAAC,KAAK,SAAS,QAASoQ,EAClC,SAAAxP,EAAE,wBAAwB,EAC7B,GAEJ,CAEJ,EAEOkP,GAAQD,KChIX,mBAAAgB,GAEI,OAAAvS,OAFJ,oBArBJ,IAgBMwS,GAeCC,GA/BPC,GAAA/S,EAAA,kBAAAD,IAAAa,IAGA4Q,KACAM,KAYMe,GAA2C7R,GAA+B,CAC9E,GAAM,CAAE,MAAAiC,CAAM,EAAIjC,EACZ,CAAE,mBAAAwE,CAAmB,EAAIlF,EAAmB,EAElD,OACED,GAAAuS,GAAA,CACG,SAAApN,EACCnF,GAACwR,GAAAxN,EAAAjD,EAAA,GAAqBJ,GAArB,CAA4B,MAAOiC,GAAgC,EAEpE5C,GAACkR,GAAAlN,EAAAjD,EAAA,GAAqBJ,GAArB,CAA4B,MAAOiC,GAAgC,EAExE,CAEJ,EAEO6P,GAAQD,KC/Bf,IAAAG,GAAAhT,EAAA,kBAAAD,MCAA,IAAA+I,GAAA9I,EAAA,kBAAAD,IAAAgT,KAEAlD,KACAmD,OCHA,IAAAC,GAAA,GAAAtF,GAAAsF,GAAA,aAAAC,GAAA,QAAA5P,KAQA,OAAS,mBAAA6P,OAAuB,oBAEhC,OAAS,OAAAC,GAAK,QAAArF,GAAM,OAAAC,GAAK,QAAAjE,GAAM,SAAAsJ,GAAO,OAAAnF,GAAK,UAAApI,GAAQ,SAAA9D,GAAO,OAAAsR,OAAW,OACrE,OAAS,WAAAC,OAAe,QAExB,OAAS,QAAAC,OAAY,mBAgBf,OAEI,OAAAnT,EAFJ,QAAA6B,OAAA,oBAVN,SAASuR,IAAuB,CAC9B,GAAM,CAAE,QAAAC,CAAQ,EAAIN,GAAI,OAAO,EACzBjT,EAASuP,GAAc,EACvB,CAAE,KAAMiE,EAAO,UAAArN,CAAU,EAAI8I,GAAY,EACzC,CAAE,OAAAvI,CAAO,EAAIyC,EAAkB,EAC/B3G,EAAIhB,EAAe,EAEzB,OAAO8K,EAA4D,CACjE,MAAO9J,EAAE,sBAAsB,EAC/B,QAASyI,GACPlJ,GAAC6H,GAAA,CAAK,KAAMqB,EAAM,SAAU,CAAE,KAAM,MAAO,EACzC,UAAA/K,EAAC0J,GAAK,KAAL,CAAU,MAAOpH,EAAE,MAAM,EAAG,KAAK,OAAO,MAAO,CAAC,CAAE,SAAU,EAAK,CAAC,EACjE,SAAAtC,EAACgT,GAAA,EAAM,EACT,EACAhT,EAAC0J,GAAK,KAAL,CAAU,MAAOpH,EAAE,MAAM,EAAG,KAAK,QAChC,SAAAtC,EAACyF,GAAA,CAAO,WAAU,GAAC,KAAK,WAAW,QAASQ,EACxC,UAAAqN,GAAA,KAAAA,EAAS,CAAC,GAAG,IAAIC,GACjBvT,EAACsR,GAAA,CAAO,MAAOiC,EAAK,KACjB,SAAAA,EAAK,MADuBA,EAAK,EAEpC,CACD,EACH,EACF,GACF,EAEI,UAAUrH,EAAQ,QAAArJ,EAAA,sBACtB,MAAM/C,EAAO,QAAQoM,CAAM,EAC3B1F,EAAOvD,GAAK,CAAE,KAAM,CAAE,CAAC,EACvBoQ,EAAQ,QAAQ/Q,EAAE,6BAA6B,CAAC,CAClD,GACF,CAAC,CACH,CAEA,SAASkR,IAAuB,CAC9B,GAAM,CAAE,QAAAH,CAAQ,EAAIN,GAAI,OAAO,EACzBU,EAASnE,GAAc,EACvB,CAAE,KAAMgE,EAAO,UAAArN,CAAU,EAAI8I,GAAY,EACzC,CAAE,OAAAvI,CAAO,EAAIyC,EAAkB,EAC/B3G,EAAIhB,EAAe,EAEzB,OAAO8K,EAA4D,CACjE,MAAO9J,EAAE,sBAAsB,EAC/B,QAASyI,GACPlJ,GAAC6H,GAAA,CAAK,KAAMqB,EAAM,SAAU,CAAE,KAAM,MAAO,EACzC,UAAA/K,EAAC0J,GAAK,KAAL,CAAU,OAAM,GAAC,KAAK,KACrB,SAAA1J,EAACgT,GAAA,EAAM,EACT,EACAhT,EAAC0J,GAAK,KAAL,CAAU,MAAOpH,EAAE,MAAM,EAAG,KAAK,OAAO,MAAO,CAAC,CAAE,SAAU,EAAK,CAAC,EACjE,SAAAtC,EAACgT,GAAA,CAAM,SAAQ,GAAC,EAClB,EACAhT,EAAC0J,GAAK,KAAL,CAAU,MAAOpH,EAAE,MAAM,EAAG,KAAK,QAChC,SAAAtC,EAACyF,GAAA,CAAO,WAAU,GAAC,KAAK,WAAW,QAASQ,EACxC,UAAAqN,GAAA,KAAAA,EAAS,CAAC,GAAG,IAAIC,GACjBvT,EAACsR,GAAA,CAAO,MAAOiC,EAAK,KACjB,SAAAA,EAAK,MADuBA,EAAK,EAEpC,CACD,EACH,EACF,GACF,EAEI,UAAUrH,EAAQ,QAAArJ,EAAA,sBACtB,MAAM4Q,EAAO,QAAQvH,CAAM,EAC3B1F,EACEvD,GACA,OACA8O,GACEmB,GAAQnB,EAAM2B,GAAS,CAtFjC,IAAAlT,EAuFY,IAAMmT,GAAQnT,EAAAkT,GAAA,YAAAA,EAAO,OAAP,YAAAlT,EAAa,KAAKgC,GAAQA,EAAK,KAAO0J,EAAO,IAEvDyH,IACFA,EAAM,MAAQzH,EAAO,MAEzB,CAAC,EACH,CAAE,WAAY,EAAM,CACtB,EACAmH,EAAQ,QAAQ/Q,EAAE,6BAA6B,CAAC,CAClD,GACF,CAAC,CACH,CAlGA,IAeQgP,GAEKrO,GAmFP2Q,GA6ICf,GAjPPgB,GAAAlU,EAAA,kBAAAD,IAAA6H,KACAsB,KACAyB,KAEA7B,KACAsE,KACA7D,KACAzH,KAQM,CAAE,OAAA6P,IAAW7L,IAENxC,GAAM,yBAmFb2Q,GAAe,IAAM,CACzB,GAAM,CAAE,MAAArH,EAAO,QAAA8G,CAAQ,EAAIN,GAAI,OAAO,EAChCe,EAASvE,GAAc,EACvB,CAAE,OAAA/I,CAAO,EAAIyC,EAAkB,EAC/B,CAAE,KAAM8K,EAAmB,cAAeC,CAAsB,EAAIZ,GAAqB,EACzF,CAAE,KAAMa,EAAmB,cAAeC,CAAsB,EAAIV,GAAqB,EACzFlR,EAAIhB,EAAe,EAEnB6S,EAA0C,CAC9C,CACE,MAAO7R,EAAE,MAAM,EACf,UAAW,OACX,IAAK,MACP,EACA,CACE,MAAO,KACP,UAAW,KACX,IAAK,IACP,EACA,CACE,MAAOA,EAAE,MAAM,EACf,UAAW,QACX,IAAK,QACL,MAAO,MACP,OAAOM,EAAiB,CACtB,OACE5C,EAAC6N,GAAA,CAAI,OAAQ,CAAC,EAAG,CAAC,EACd,UAAAjL,GAAS,CAAC,GAAG,IAAKJ,GAClBxC,EAAC2N,GAAA,CACE,SAAAnL,IAAS,OACRxC,EAACiT,GAAA,CAAI,MAAM,OAAQ,SAAAzQ,EAAK,EAExBxC,EAACiT,GAAA,CAAI,MAAM,UACT,SAAAjT,EAACmT,GAAA,CAAK,GAAI,oBAAoB3Q,CAAI,GAAK,SAAAA,EAAK,EAC9C,GANMA,CAQV,CACD,EACH,CAEJ,CACF,EACA,CACE,MAAOF,EAAE,cAAc,EACvB,UAAW,QACX,IAAK,OACP,EACA,CACE,MAAOA,EAAE,WAAW,EACpB,MAAO,IACP,MAAO,SACP,OAASM,GACPf,GAACF,GAAA,CACC,UAAA3B,EAAC4I,EAAA,CACC,WAAU,GACV,KAAK,QACL,KAAK,OACL,KAAK,SACL,QAAS,IAAM,CACbqL,EAAkB,CAChB,cAAe,CACb,GAAIrR,EAAM,GACV,KAAMA,EAAM,KACZ,MAAOA,EAAM,KACf,CACF,CAAC,CACH,EAEC,SAAAN,EAAE,QAAQ,EACb,EACAtC,EAAC4I,EAAA,CACC,WAAU,GACV,OAAM,GACN,KAAK,QACL,KAAK,SACL,KAAK,OACL,QAAS,IAAM,CACb2D,EAAM,QAAQ,CACZ,MAAOjK,EAAE,sBAAsB,EAC/B,QACEtC,EAACsH,GAAA,CAAU,MAAO,CAAC1E,EAAM,IAAI,EAAI,SAAAN,EAAE,yBAA0B,CAAE,KAAMM,EAAM,IAAK,CAAC,EAAE,EAE/E,MAAO,QAAAC,EAAA,sBACX,MAAMiR,EAAO,QAAQ,CACnB,GAAIlR,EAAM,GACV,KAAMA,EAAM,IACd,CAAC,EACD4D,EAAOvD,GAAK,OAAW8O,GACdmB,GAAQnB,EAAM2B,GAAS,CA5LlD,IAAAlT,EAAAC,EA6LsB,IAAMuH,GAAQxH,EAAAkT,GAAA,YAAAA,EAAO,OAAP,YAAAlT,EAAa,UAAUgC,GAAQA,EAAK,KAAOI,EAAM,IAC3DoF,KACFvH,EAAAiT,GAAA,YAAAA,EAAO,OAAP,MAAAjT,EAAa,OAAOuH,EAAO,GAE/B,CAAC,CACF,EACDqL,EAAQ,QAAQ/Q,EAAE,6BAA6B,CAAC,CAClD,GACF,CAAC,CACH,EAEC,SAAAA,EAAE,QAAQ,EACb,GACF,CAEJ,CACF,EAEA,OACET,GAAC6L,GAAA,CACC,MAAOpL,EAAE,MAAM,EACf,MACEtC,EAAC4I,EAAA,CACC,WAAU,GACV,KAAK,UACL,KAAM5I,EAAC8S,GAAA,EAAgB,EACvB,KAAK,SACL,QAAS,IAAM,CACbiB,EAAkB,CACpB,EAEC,SAAAzR,EAAE,sBAAsB,EAC3B,EAGF,UAAAtC,EAACqK,GAAA,CACC,WAAU,GACV,KAAK,SACL,IAAKpH,GACL,OAAO,KACP,QAASkR,EACT,kBAAmBlQ,GAAY,CAC7B,GAAM,CAAE,KAAAmQ,EAAM,MAAAC,CAAM,EAAIpQ,EACxB,MAAO,CAAE,KAAMmQ,EAAM,MAAOC,CAAM,CACpC,EACF,EACCL,EACAE,GACH,CAEJ,EAEOrB,GAAQe,KCjPf,IAAAU,GAAA,GAAAhH,GAAAgH,GAAA,aAAAC,KAWA,OAAS,wBAAAC,OAA4B,oBAErC,OAAS,OAAAzB,GAAK,QAAArF,GAAM,QAAAhE,GAAM,SAAAsJ,GAAO,SAAArR,OAAa,OAC9C,OAAS,WAAAuR,OAAe,QACxB,OAAS,QAAAC,OAAY,mBA0Bf,OA8EW,YAAAZ,GA5EP,OAAAvS,EAFJ,QAAA6B,OAAA,oBAzCN,IAiBMoB,GAEAmQ,GAmCAqB,GA+CAC,GAsICH,GA3OPI,GAAAhV,EAAA,kBAAAD,IAAAa,IACAgH,KACAsB,KACAyB,KAEA7B,KACAsE,KACAtE,IACAS,KACAzH,IACA4C,IAOMpB,GAAM,yBAENmQ,GAAuB,IAAM,CACjC,GAAM,CAAE,QAAAC,CAAQ,EAAIN,GAAI,OAAO,EACzB,CAAE,OAAAvM,CAAO,EAAIyC,EAAkB,EAC/BnJ,EAASmP,GAAc,EACvB3M,EAAIhB,EAAe,EAEnBa,EAAmB+J,GAAyFrJ,EAAA,wBAChH,MAAM/C,EAAO,QAAQ,CACnB,KAAM,QAAQoM,EAAO,IAAI,GACzB,YAAaA,EAAO,WACtB,CAAC,EACD1F,EAAOvD,GAAK,CAAE,KAAM,CAAE,CAAC,EACvBoQ,EAAQ,QAAQ/Q,EAAE,6BAA6B,CAAC,CAClD,GAEA,OAAO8J,EAGJ,CACD,MAAO9J,EAAE,sBAAsB,EAC/B,MAAO,OACP,QAASyI,GACPlJ,GAAC6H,GAAA,CAAK,KAAMqB,EAAM,OAAO,WACvB,UAAA/K,EAAC0J,GAAK,KAAL,CAAU,MAAOpH,EAAE,MAAM,EAAG,KAAK,OAAO,MAAO,CAAC,CAAE,SAAU,EAAK,CAAC,EACjE,SAAAtC,EAACgT,GAAA,CAAM,YAAY,QAAQ,EAC7B,EACAhT,EAAC0J,GAAK,KAAL,CAAU,KAAK,cACd,SAAA1J,EAACyS,GAAA,EAAe,EAClB,GACF,EAEF,UAAAtQ,CACF,CAAC,CACH,EAEMsS,GAAuB,IAAM,CACjC,GAAM,CAAE,QAAApB,CAAQ,EAAIN,GAAI,OAAO,EACzB,CAAE,OAAAvM,CAAO,EAAIyC,EAAkB,EAC/BwK,EAAStE,GAAc,EACvB7M,EAAIhB,EAAe,EAEzB,OAAO8K,EAGJ,CACD,MAAO9J,EAAE,sBAAsB,EAC/B,MAAO,OACP,QAASyI,GACPlJ,GAAC6H,GAAA,CAAK,KAAMqB,EACV,UAAA/K,EAAC0J,GAAK,KAAL,CAAU,MAAOpH,EAAE,MAAM,EAAG,KAAK,OAAO,MAAO,CAAC,CAAE,SAAU,EAAK,CAAC,EACjE,SAAAtC,EAACgT,GAAA,CAAM,SAAQ,GAAC,YAAY,QAAQ,EACtC,EACAhT,EAAC0J,GAAK,KAAL,CAAU,KAAK,cACd,SAAA1J,EAACyS,GAAA,EAAe,EAClB,GACF,EAEF,UAAW,CAAOvG,EAAQ0I,EAAOhI,IAAgC/J,EAAA,wBAC/D,MAAM4Q,EAAO,QAAQ,CACnB,GAAI7G,EAAY,GAChB,KAAM,QAAQV,EAAO,IAAI,GACzB,YAAaA,EAAO,WACtB,CAAC,EAED1F,EACEvD,GACA,OACA8O,GACEmB,GAAQnB,EAAM2B,GAAS,CAvFjC,IAAAlT,EAwFY,IAAMmT,GAAQnT,EAAAkT,GAAA,YAAAA,EAAO,OAAP,YAAAlT,EAAa,KAAKgC,GAAQA,EAAK,KAAOoK,EAAY,IAE5D+G,IACFA,EAAM,YAAczH,EAAO,YAE/B,CAAC,EACH,CAAE,WAAY,EAAM,CACtB,EACAmH,EAAQ,QAAQ/Q,EAAE,6BAA6B,CAAC,CAClD,EACF,CAAC,CACH,EAEMoS,GAAW,IAAM,CACrB,GAAM,CAAE,WAAYG,CAAS,EAAItM,EAAc,SAAU,CAAE,WAAY,EAAK,CAAC,EACvE,CAAE,MAAAgE,EAAO,QAAA8G,CAAQ,EAAIN,GAAI,OAAO,EAChC,CAAE,mBAAA5N,CAAmB,EAAIlF,EAAmB,EAC5C6T,EAAS1E,GAAc,EACvB,CAAE,OAAA5I,CAAO,EAAIyC,EAAkB,EAC/B,CAAE,KAAM8K,EAAmB,cAAeC,CAAsB,EAAIZ,GAAqB,EACzF,CAAE,KAAMa,EAAmB,cAAeC,CAAsB,EAAIO,GAAqB,EACzFnS,EAAIhB,EAAe,EAEnB6S,EAA0C,CAC9C,CACE,MAAO7R,EAAE,MAAM,EACf,IAAK,OACL,OAAOM,EAAqB,CAC1B,OAAIiS,EACK7U,EAACmT,GAAA,CAAK,GAAI,GAAGvQ,EAAM,IAAI,GAAK,SAAAA,EAAM,KAAK,EAEvC5C,EAAAuS,GAAA,CAAG,SAAA3P,EAAM,KAAK,CAEzB,CACF,EACA,CACE,MAAO,KACP,UAAW,KACX,IAAK,IACP,EACA,CACE,MAAON,EAAE,cAAc,EACvB,UAAW,QACX,IAAK,OACP,EACA,CACE,MAAOA,EAAE,WAAW,EACpB,MAAO,IACP,MAAO,SACP,OAASM,GAELf,GAACF,GAAA,CAAM,KAAK,QACV,UAAA3B,EAAC4I,EAAA,CACC,WAAU,GACV,KAAK,SACL,KAAK,QACL,KAAK,OACL,QAAS,IAAY/F,EAAA,wBACnB,GAAM,CAAE,KAAM0Q,CAAK,EAAI,MAAMvQ,EAC3B,yBAAyBmC,EAAqB,KAAO,EAAE,SAASvC,EAAM,IAAI,GAC1E,CAAE,WAAY,EAAK,CACrB,EACAqR,EAAkB,CAChB,cAAe,CACb,YAAaV,GAAA,YAAAA,EAAM,YACnB,KAAMA,GAAA,YAAAA,EAAM,KAAK,QAAQ,SAAU,GACrC,EACA,YAAa,CACX,GAAIA,GAAA,YAAAA,EAAM,EACZ,CACF,CAAC,CACH,GAEC,SAAAjR,EAAE,MAAM,EACX,EACAtC,EAAC4I,EAAA,CACC,WAAU,GACV,OAAM,GACN,KAAK,SACL,KAAK,QACL,KAAK,OACL,QAAS,IAAM,CACb2D,EAAM,QAAQ,CACZ,MAAOjK,EAAE,sBAAsB,EAC/B,QACEtC,EAACsH,GAAA,CAAU,MAAO,CAAC1E,EAAM,IAAI,EAAI,SAAAN,EAAE,yBAA0B,CAAE,KAAMM,EAAM,IAAK,CAAC,EAAE,EAE/E,MAAO,QAAAC,EAAA,sBACX,MAAMiR,EAAO,QAAQ,CACnB,GAAIlR,EAAM,GACV,KAAMA,EAAM,IACd,CAAC,EACD4D,EAAOvD,GAAK,OAAW8O,GACdmB,GAAQnB,EAAM2B,GAAS,CArLpD,IAAAlT,EAAAC,EAsLwB,IAAMuH,GAAQxH,EAAAkT,GAAA,YAAAA,EAAO,OAAP,YAAAlT,EAAa,UAAUgC,GAAQA,EAAK,KAAOI,EAAM,IAC3DoF,KACFvH,EAAAiT,GAAA,YAAAA,EAAO,OAAP,MAAAjT,EAAa,OAAOuH,EAAO,GAE/B,CAAC,CACF,EACDqL,EAAQ,QAAQ/Q,EAAE,6BAA6B,CAAC,CAClD,GACF,CAAC,CACH,EAEC,SAAAA,EAAE,QAAQ,EACb,GACF,CAGN,CACF,EAEA,OACET,GAAC6L,GAAA,CACC,MAAOpL,EAAE,MAAM,EACf,MACEtC,EAAC4I,EAAA,CACC,WAAU,GACV,KAAK,UACL,KAAK,SACL,KAAM5I,EAACwU,GAAA,EAAqB,EAC5B,QAAS,IAAM,CACbT,EAAkB,CACpB,EAEC,SAAAzR,EAAE,sBAAsB,EAC3B,EAGF,UAAAtC,EAACqK,GAAA,CACC,WAAU,GACV,OAAO,OACP,QAAS8J,EACT,KAAK,SACL,IAAKlR,GACL,kBAAmBgB,GAAY,CAC7B,GAAM,CAAE,KAAAmQ,EAAM,MAAAC,CAAM,EAAIpQ,EACxB,MAAO,CAAE,KAAMmQ,EAAM,MAAOC,CAAM,CACpC,EACF,EACCL,EACAE,GACH,CAEJ,EAEOK,GAAQG,KC3Of,IAAAI,GAAA,GAAAxH,GAAAwH,GAAA,aAAAC,KACA,OAAS,cAAAC,GAAY,QAAAtH,GAAM,gBAAAuH,GAAc,YAAAjE,OAAgB,OACzD,OAAS,QAAAmC,GAAM,aAAA+B,OAAiB,mBAS5B,mBAAA3C,GAMe,OAAAvS,GAUT,QAAA6B,OAhBN,oBAXJ,IAKMsT,GAkCCJ,GAvCPK,GAAAzV,EAAA,kBAAAD,IAAA+I,KAGAhH,IAEM0T,GAAa,IAAM,CACvB,IAAM/R,EAAS8R,GAAU,EACnB,CAAE,KAAA1T,EAAM,UAAAyE,CAAU,EAAI+I,GAAQ5L,EAAO,IAAc,EACnDd,EAAIhB,EAAe,EAEzB,OACEO,GAAA0Q,GAAA,CACE,UAAAvS,GAACgV,GAAA,CACC,MAAO,CAAE,aAAc,EAAG,EAC1B,MAAO,CACL,CACE,IAAK,IACL,MAAOhV,GAACmT,GAAA,CAAK,GAAG,mBAAoB,SAAA7Q,EAAE,MAAM,EAAE,CAChD,EACA,CACE,IAAK,IACL,MAAOc,EAAO,IAChB,CACF,EACF,EACApD,GAAC0N,GAAA,CAAK,MAAOpL,EAAE,kBAAkB,EAC/B,SAAAT,GAACmP,GAAA,CAAS,QAAS/K,EACjB,UAAApE,GAACoT,GAAA,CAAa,OAAQ,EAAG,OAAO,WAC9B,UAAAjV,GAACiV,GAAa,KAAb,CAAkB,MAAO3S,EAAE,MAAM,EAAI,SAAAd,GAAA,YAAAA,EAAM,KAAK,EACjDxB,GAACiV,GAAa,KAAb,CAAkB,MAAM,KAAM,SAAAzT,GAAA,YAAAA,EAAM,GAAG,EACxCxB,GAACiV,GAAa,KAAb,CAAkB,MAAO3S,EAAE,cAAc,EAAI,SAAAd,GAAA,YAAAA,EAAM,MAAM,GAC5D,EACAxB,GAACyS,GAAA,CAAe,SAAQ,GAAC,MAAOjR,GAAA,YAAAA,EAAM,YAAa,GACrD,EACF,GACF,CAEJ,EAEOuT,GAAQI,KCvCfzV,IAAAa,ICAAb,IAAA,OAAS,gBAAA2V,OAAoB,oBAE7B,OAAS,SAAArC,GAAO,SAAArR,GAAO,OAAAsR,GAAK,SAAArR,OAAa,OAEzC,OAAS,aAAA+C,GAAW,UAAAqF,GAAQ,YAAApF,OAAgB,QA+F9B,cAAA5E,GAmDJ,QAAA6B,OAnDI,oBAnFd,IAAMyT,GAAoC3U,GAAS,CACjD,GAAM,CAAE,YAAA4U,EAAa,QAAAC,EAAS,UAAAC,EAAW,YAAAC,EAAa,eAAAC,CAAe,EAAIhV,EACnE,CAAE,MAAA0B,CAAM,EAAIT,GAAM,SAAS,EAC3B,CAACgU,EAAMC,CAAO,EAAIjR,GAAmB,CAAC,CAAC,EACvC,CAACkR,EAAcC,CAAe,EAAInR,GAAS,EAAK,EAChD,CAACoR,EAAYC,CAAa,EAAIrR,GAAS,EAAE,EACzC,CAACsR,EAAgBC,CAAiB,EAAIvR,GAAS,EAAE,EACjD,CAACwR,EAAgBC,CAAiB,EAAIzR,GAAiB,EAAE,EACzD0R,EAAWtM,GAAiB,IAAI,EAChCuM,EAAevM,GAAiB,IAAI,EAE1CrF,GAAU,IAAM,CACdkR,EAAQN,GAAA,KAAAA,EAAe,CAAC,CAAC,CAC3B,EAAG,CAACA,CAAW,CAAC,EAEhB5Q,GAAU,IAAM,CA/BlB,IAAAnE,EAgCQsV,KACFtV,EAAA8V,EAAS,UAAT,MAAA9V,EAAkB,QAEtB,EAAG,CAACsV,CAAY,CAAC,EAEjBnR,GAAU,IAAM,CArClB,IAAAnE,GAsCIA,EAAA+V,EAAa,UAAb,MAAA/V,EAAsB,OACxB,EAAG,CAACwV,CAAU,CAAC,EAEf,IAAMQ,EAAqBC,GAAuB5T,EAAA,wBAGhD,GAFgB,MAAM8S,GAAA,YAAAA,EAAiBc,GAE1B,CACX,IAAMC,EAAUd,EAAK,OAAOe,IAAOA,KAAQF,CAAU,EACrDZ,EAAQa,CAAO,CACjB,CACF,GAEME,EAAY,IAAM,CACtBb,EAAgB,EAAI,CACtB,EAEMc,EAAqBhG,GAA2C,CACpEoF,EAAcpF,EAAE,OAAO,KAAK,CAC9B,EAEMiG,GAAqB,IAAYjU,EAAA,wBACjCmT,GAAcJ,EAAK,QAAQI,CAAU,IAAM,KAC7B,MAAMN,GAAA,YAAAA,EAAcM,KAGlCH,EAAQ,CAAC,GAAGD,EAAMI,CAAU,CAAC,EAIjCD,EAAgB,EAAK,EACrBE,EAAc,EAAE,CAClB,GAEMc,GAAyBlG,GAA2C,CACxEwF,EAAkBxF,EAAE,OAAO,KAAK,CAClC,EAEMmG,GAAyB,IAAM,CACnC,IAAMN,EAAU,CAAC,GAAGd,CAAI,EACxBc,EAAQR,CAAc,EAAIE,EAC1BP,EAAQa,CAAO,EACfP,EAAkB,EAAE,EACpBF,EAAc,EAAE,CAClB,EAEMgB,EAAqC,CACzC,MAAO,GACP,cAAe,KACjB,EAEMC,GAAoC,CACxC,WAAY7U,EAAM,iBAClB,YAAa,QACf,EAEA,OACER,GAACF,GAAA,CAAM,KAAI,GAAC,KAAM,CAAC,EAAG,CAAC,EACrB,UAAA3B,GAAC2B,GAAA,CAAM,KAAI,GAAC,KAAM,CAAC,EAAG,CAAC,EACpB,SAAAiU,EAAK,IAAI,CAACe,EAAK3O,KACVkO,IAAmBlO,GAEnBhI,GAACgT,GAAA,CACC,IAAKuD,EAEL,KAAK,QACL,MAAOU,EACP,MAAOb,EACP,SAAUW,GACV,OAAQC,GACR,aAAcA,IANTL,CAOP,EAKF3W,GAACiT,GAAA,CAEC,SAAUwC,EACV,MAAO,CAAE,WAAY,MAAO,EAC5B,QAAe5E,GAAKhO,EAAA,wBAClBgO,EAAE,eAAe,EACjB,MAAM2F,EAAYG,CAAG,CACvB,GAEA,SAAA3W,GAAC,QACC,cAAe6Q,GAAK,CACd7I,KAAU,IACZmO,EAAkBnO,EAAK,EACvBqO,EAAkBM,CAAG,EACrB9F,EAAE,eAAe,EAErB,EAEC,SAAA8F,EACH,GAlBKA,CAmBP,CAEH,EACH,EACCnB,IACEM,EACC9V,GAACgT,GAAA,CACC,IAAKsD,EACL,KAAK,OACL,KAAK,QACL,MAAOW,EACP,MAAOjB,EACP,SAAUa,EACV,OAAQC,GACR,aAAcA,GAChB,EAEAjV,GAACoR,GAAA,CAAI,MAAOiE,GAAc,QAASN,EACjC,UAAA5W,GAACqV,GAAA,EAAa,EAAE,oBAElB,IAEN,CAEJ,EAEO8B,GAAQ7B,GD3JftT,KAEAsC,KAEAiD,KERA7H,IAMAa,IACA+D,KAPA,UAAY8S,OAAU,OACtB,OAAS,WAAAxJ,GAAS,SAAAjM,OAAa,OAE/B,OAAS,YAAA0V,OAAgB,QACzB,OAAS,QAAAlE,OAAY,mBACrB,OAAOmE,OAAU,sBCLjB5X,IAAA,OAAS,QAAA6X,OAAY,OASrB,OAAS,eAAA5R,GAAa,aAAAhB,GAAW,WAAAiB,OAAe,QAChD,OAAS,QAAAuN,GAAM,eAAApF,OAAmB,mBCVlCrO,IAAA,OAAS,UAAAI,OAAc,UACvB,OAAS,qBAAA+F,GAAmB,WAAArB,OAAe,qBASpC,IAAMgT,GAAc1X,GAAiB,EAC1C0E,GACEa,IAAQ,CACN,SAAU,CAAC,EACX,YAAaoS,GAAQpS,EAAI,CAAE,SAAUoS,CAAK,CAAC,EAC3C,aAAc,CAAC,EACf,gBAAiBA,GAAQpS,EAAI,CAAE,aAAcoS,CAAK,CAAC,CACrD,GACA,CACE,KAAM,MACN,QAAS5R,GAAkB,IAAM,YAAY,EAC7C,WAAYL,IAAU,CACpB,SAAUA,EAAM,SAChB,aAAcA,EAAM,YACtB,EACF,CACF,CACF,EDfAjF,IACAkI,IAyBW,mBAAA8J,GAAA,OAAAvS,OAAA,oBAFX,IAAM0X,GAAW,CAACC,EAAmBC,IAC9BD,EAIDC,EACK5X,GAACmT,GAAA,CAAK,GAAIyE,EAAQ,SAAAD,EAAM,EAG1BA,EAPE3X,GAAAuS,GAAA,EAAE,EAUb,SAASsF,GAAeC,EAAsBhI,EAAuC,CACnF,IAAMhI,EAAqB,CAAC,EAE5B,QAASmK,EAAI,EAAGA,EAAI6F,EAAM,OAAQ7F,IAChC,GAAI6F,EAAM7F,CAAC,IAAM,KACfnK,EAAOmK,CAAC,EAAI,aACF6F,EAAM7F,CAAC,EAAsB,OAAS,UAChDnK,EAAOmK,CAAC,EAAIlR,EAAA,GAAK+W,EAAM7F,CAAC,WAEnB6F,EAAM7F,CAAC,EAAwC,SAAU,CAC5D,IAAmCzR,EAAAsX,EAAM7F,CAAC,EAAlC,UAAAvR,CA1DhB,EA0D2CF,EAAduI,EAAAnI,EAAcJ,EAAd,CAAb,aACRsH,EAAOmK,CAAC,EAAIjO,EAAAjD,EAAA,GACPgI,GADO,CAEV,SAAU8O,GAAenX,GAAA,KAAAA,EAAY,CAAC,EAAGoP,CAAW,CACtD,EACF,KAAO,CACL,IAA6CrP,EAAAqX,EAAM7F,CAAC,EAA5C,OAAA2F,EAAO,MAAAD,EAAO,KAAAnP,CAhE9B,EAgEqD/H,EAAdsI,EAAAnI,EAAcH,EAAd,CAAvB,QAAO,QAAO,SAChBsX,EAAS,CAACvP,GAAQ,CAACsH,GAAeA,EAAYtH,CAAI,EAExDV,EAAOmK,CAAC,EAAI8F,EACP/T,EAAAjD,EAAA,GACIgI,GADJ,CAEC,MAAO2O,GAASC,EAAOC,CAAK,CAC9B,GACA,IACN,CAIJ,OAAO9P,CACT,CAGA,SAASkQ,GACPF,EACAhQ,EAAyD,CAAC,EAC1DmQ,EAAoB,CAAC,EACrB,CACA,QAAWzV,KAAQsV,EAAO,CACxB,IAAMpX,EAAY8B,EAA4C,SAE9D,GAAI,MAAM,QAAQ9B,CAAQ,EAAG,CAC3B,IAAMwX,EACH1V,EAA6B,OAAS,SAAWA,EAAM,IAAM,CAAC,GAAGyV,EAASzV,EAAM,GAAa,EAAIyV,EACpGD,GAAUtX,EAAUoH,EAAQoQ,CAAK,CACnC,MACEpQ,EAAO,KAAK,OAAO,OAAOtF,EAAuB,CAAE,QAAAyV,CAAQ,CAAC,CAAC,CAEjE,CAEA,OAAOnQ,CACT,CAEA,IAAMqQ,GAAc,IAAM,CACxB,IAAM9J,EAAWN,GAAY,EACvB,CAAE,UAAAqK,CAAU,EAAInY,EAAmB,EACnCoY,EAAezS,GAAQ,IAAMoS,GAAUI,GAAA,KAAAA,EAAa,CAAC,CAAC,EAAG,CAACA,CAAS,CAAC,EACpEjQ,EAAQkQ,EAAa,IAAI7V,GAAQA,EAAK,IAAI,EAAE,OAAO,OAAO,EAC1D,CAAE,KAAMsN,CAAY,EAAI5H,GAAeC,EAAO,CAAE,WAAY,GAAM,SAAU,EAAK,CAAC,EAClFmQ,EAAgB1S,GAAQ,IAAMiS,GAAeO,GAAA,KAAAA,EAAa,CAAC,EAAGtI,CAAW,EAAG,CAACsI,EAAWtI,CAAW,CAAC,EACpG,CAAE,SAAAyI,EAAU,aAAAC,EAAc,YAAAC,EAAa,gBAAAC,CAAgB,EAAIlB,GAAY,EAEvEmB,EAAehT,GAClB8R,GAAmB,CA/GxB,IAAAjX,EAgHM,IAAMoY,EAAgBnB,GAAA,YAAAA,EAAM,KAAKlW,IAAOgX,GAAA,YAAAA,EAAU,QAAQhX,MAAS,IAC7DoS,EAAQ0E,EAAa,KAAK7V,GAAQoW,IAAkBpW,EAAK,GAAG,EAClEiW,GAAajY,EAAAmT,GAAA,YAAAA,EAAO,UAAP,KAAAnT,EAAkB,CAACoY,CAAa,CAAc,CAC7D,EACA,CAACP,EAAcE,EAAUE,CAAW,CACtC,EAEA,OAAA9T,GAAU,IAAM,CACd,IAAMgP,EAAQ0E,EAAa,KAAK7V,GAAQ6L,EAAS,WAAa7L,EAAK,KAAK,EAExE,GAAImR,EAAO,CACT,IAAMpS,EAAMoS,EAAM,IACZsE,EAAUtE,EAAM,QACtB+E,EAAgB,CAACnX,CAAG,CAAC,EACrBkX,EAAYR,CAAO,CACrB,CACF,EAAG,CAACI,EAAchK,EAAUoK,EAAaC,CAAe,CAAC,EAGvD1Y,GAACuX,GAAA,CACC,MAAO,CAAE,YAAa,MAAO,EAC7B,MAAOe,EACP,KAAK,SACL,SAAUC,EACV,aAAcC,EACd,aAAcG,EAChB,CAEJ,EAEAR,GAAQ,YAAc,UAEtB,IAAOU,GAAQV,GEhJfzY,IAKA+B,IACA8C,KALA,OAAS,eAAAG,OAAmB,mBAC5B,OAAS,YAAAoU,GAAU,SAAAnX,OAAa,OAChC,OAAOwR,OAAU,0BACjB,OAAS,kBAAA4F,GAAgB,gBAAAC,OAAoB,oBAkB/B,cAAAhZ,GAgBN,QAAA6B,OAhBM,oBAdd,IAAMoX,GAAiB,IAAM,CAC3B,IAAMlU,EAAWL,GAAY,EACvB,CAAE,WAAAM,EAAY,QAAAkU,CAAQ,EAAIrV,EAAc,EACxCmC,EAAOkT,EAAQ,EACf5W,EAAIhB,EAAe,EAEzB,OACEtB,GAAC8Y,GAAA,CACC,KAAM,CACJ,WAAY,GACZ,MAAO,CACL,CACE,IAAK,IACL,MACE9Y,GAACmT,GAAA,CACC,QAAS,IAAM,CACbnO,EAAW,EACXD,EAAS,QAAQ,CACnB,EAEC,SAAAzC,EAAE,uBAAuB,EAC5B,EAEF,KAAMtC,GAAC+Y,GAAA,EAAe,CACxB,CACF,CACF,EACA,UAAU,cAEV,SAAA/Y,GAACmT,GAAA,CACC,SAAAtR,GAACF,GAAA,CAAM,MAAM,SACX,UAAA3B,GAAC,QAAM,SAAAgG,GAAA,YAAAA,EAAM,YAAY,EACzBhG,GAACgZ,GAAA,CAAa,MAAO,CAAE,SAAU,MAAO,EAAG,GAC7C,EACF,EACF,CAEJ,EAEOG,GAAQF,GC/CfvZ,IAEA+B,IACA6C,KACA/D,IAJA,OAAS,QAAAmN,GAAM,SAAA2D,OAAa,OAef,cAAArR,OAAA,oBATb,IAAMoZ,GAAqCzY,GAAS,CAClD,GAAM,CAAE,SAAAD,CAAS,EAAIC,EACf,CAAE,mBAAAwE,EAAoB,eAAAkU,CAAe,EAAIpZ,EAAmB,EAC5D,CAAE,KAAA6D,CAAK,EAAIC,GAAa,EACxBzB,EAAIhB,EAAe,EAEzB,OAAI6D,GAAsB,CAACkU,EACrBvV,EAEK9D,GAAC,OAAmB,SAAAU,GAAVoD,EAAK,EAAc,EAGlC9D,GAAC0N,GAAA,CACC,SAAA1N,GAACqR,GAAA,CAAM,MAAOA,GAAM,uBAAwB,YAAa/O,EAAE,yBAAyB,EAAG,EACzF,EAKC5B,CACT,EAEO4Y,GAAQF,GJeP,OACE,OAAApZ,EADF,QAAA6B,OAAA,oBA/BR,GAAM,CAAE,KAAA+H,GAAM,MAAAhI,EAAM,EAAIwV,GAClB,CAAE,OAAAmC,GAAQ,MAAAC,GAAO,QAAAC,EAAQ,EAAS,UAMlCC,GAA0B/Y,GAAS,CACvC,GAAM,CAAE,SAAAD,EAAU,OAAAwB,CAAO,EAAIvB,EACvB,CACJ,MAAO,CAAE,iBAAAgZ,EAAkB,YAAAC,CAAY,CACzC,EAAIhY,GAAM,SAAS,EACb,CAAE,MAAAiY,EAAO,mBAAA1U,EAAoB,eAAAkU,EAAgB,mBAAA9K,CAAmB,EAAItO,EAAmB,EAE7F,OACE4B,GAAM,UAAL,CAAY,SAAQ,GAAC,UAAU,WAC9B,UAAAA,GAAC2X,GAAA,CACC,MAAO,IACP,MAAO,CACL,SAAU,OACV,OAAQ,QACR,SAAU,QACV,KAAM,EACN,IAAK,EACL,OAAQ,EACR,iBAAkB,EAClB,iBAAkB,QAClB,iBAAkBI,CACpB,EACA,MAAM,QAEN,UAAA/X,GAAC,OAAI,UAAU,2BACb,UAAA7B,EAAC,OAAI,IAAKsX,GAAM,IAAI,OAAO,UAAU,UAAU,EAC/CtX,EAACmT,GAAA,CAAK,UAAU,yBAAyB,GAAG,IACzC,SAAA0G,EACH,GACF,EACA7Z,EAAC6Y,GAAA,EAAQ,GACX,EACAhX,GAAM,UAAL,CAAY,UAAU,QACrB,UAAA7B,EAACuZ,GAAA,CACC,MAAO,CACL,QAAS,SACT,WAAYI,EACZ,kBAAmB,EACnB,kBAAmB,QACnB,kBAAmBC,CACrB,EAEA,SAAA/X,GAAC,OAAI,UAAU,2CACb,UAAA7B,EAAC,OAAK,SAAAmF,GAAsB,CAACkU,GAAkBrZ,EAACoG,GAAA,EAAW,EAAG,EAC9DvE,GAACF,GAAA,CAAM,KAAK,QAAQ,MAAO3B,EAAC4N,GAAA,CAAQ,KAAK,WAAW,EACjD,UAAA1L,GAAA,YAAAA,EAAQ,IAAIuI,GAASzK,EAAC,QAAsB,SAAAyK,EAAM,UAAlBA,EAAM,GAAqB,GAC3D8D,EACDvO,EAACmZ,GAAA,EAAW,GACd,GACF,EACF,EACAnZ,EAACyZ,GAAA,CAAQ,UAAU,iBAAiB,MAAO,CAAE,SAAU,SAAU,EAC/D,SAAAzZ,EAACqX,GAAA,CACC,SACErX,EAAC4J,GAAA,CACC,MAAO,CACL,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,OAAQ,OACV,EACF,EAGD,SAAAzE,GAAsB,CAACkU,EAAiBrZ,EAACsZ,GAAA,CAAa,SAAA5Y,EAAS,EAAiBA,EACnF,EACF,GACF,GACF,CAEJ,EAEOoZ,GAAQJ,GF7Ef7Q,KOdAnJ,IAEA+B,IACAgH,IAHA,OAAS,UAAAkB,GAAQ,QAAAC,OAAY,OAgBvB,OAeG,YAAA2I,GAfH,OAAAvS,OAAA,oBAPN,IAAM+Z,GAA+DpZ,GAAS,CAC5E,GAAM,CAAE,KAAA6H,EAAM,SAAA9H,CAAS,EAAIC,EACrB,CAAE,WAAAqI,EAAY,aAAAZ,CAAa,EAAIG,EAAcC,CAAI,EACjDlG,EAAIhB,EAAe,EAEzB,OAAI8G,EAEApI,GAAC4J,GAAA,CACC,MAAO,CACL,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,OAAQ,GACV,EACF,EAICZ,EAIEhJ,GAAAuS,GAAA,CAAG,SAAA7R,EAAS,EAHVV,GAAC2J,GAAA,CAAO,OAAO,MAAM,SAAUrH,EAAE,eAAe,EAAG,CAI9D,EAEO0X,GAAQD,GPhBfzP,KAIAyC,KACAtE,IQvBA/I,IAAA,OAAS,QAAAua,OAAY,QAUN,cAAAja,OAAA,oBAPf,IAAMkO,GAAQ+L,GAAK,IAAM,qCAAiB,EACpCvL,GAAWuL,GAAK,IAAM,qCAAoB,EAE1CC,GAAsB,CAC1B,SAAU,CACR,CACE,KAAM,QACN,QAASla,GAACkO,GAAA,EAAM,CAClB,EACA,CACE,KAAM,IACN,QAASlO,GAAC0O,GAAA,EAAS,CACrB,CACF,CACF,EAEOyL,GAAQD,GCnBfxa,IAAA,OAAS,QAAAua,OAAY,QAErB,OAAS,YAAAnM,OAAgB,mBAYR,cAAA9N,OAAA,oBAVjB,IAAM4T,GAAWqG,GAAK,IAAM,qCAAoB,EAC1CvF,GAAWuF,GAAK,IAAM,qCAAoB,EAC1C9E,GAAa8E,GAAK,IAAM,qCAAsB,EAE9CC,GAAwB,CAC5B,CACE,KAAM,aACN,SAAU,CACR,CACE,MAAO,GACP,QAASla,GAAC8N,GAAA,CAAS,SAAS,OAAO,GAAG,OAAO,CAC/C,EACA,CACE,KAAM,OACN,QAAS9N,GAAC4T,GAAA,EAAS,CACrB,EACA,CACE,KAAM,OACN,QAAS5T,GAAC0U,GAAA,EAAS,CACrB,EACA,CACE,KAAM,aACN,QAAS1U,GAACmV,GAAA,EAAW,CACvB,CACF,CACF,CACF,EAEOiF,GAAQF,GTLfhR,KAEA3E,KAEA9C,IACA4C,IACA3B","sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Game } from '@/components/GameSelect'\nimport type { Locale } from '@/locales'\nimport type { FC, PropsWithChildren, ReactNode } from 'react'\nimport { createContext, useContext } from 'react'\nimport { create, useStore } from 'zustand'\nimport type { NavMenuItem } from '../NavMenu'\n\nexport interface ContextState {\n title: string\n menuItems: NavMenuItem[]\n hideGameSelect: boolean\n usePermissionApiV2: boolean // 使用 V2 版本的权限接口\n gameFilter?: (game: Game) => boolean\n locale?: Locale\n localeDropdownMenu?: ReactNode\n}\n\nconst defaultState: ContextState = {\n title: '',\n menuItems: [],\n hideGameSelect: false,\n usePermissionApiV2: false,\n}\n\n// 全局的上下文。因为 ContextProvider 支持嵌套,所以 toolkitContextStore 的值等同于最内层的 ContextProvider 包含的上下文。\nexport const contextStore = create<ContextState>(() => defaultState)\n\nconst ToolkitsContext = createContext<ContextState>(defaultState)\n\nexport function useContextStore<T>(selector: (state: ContextState) => T): T {\n return useStore(contextStore, selector)\n}\n\n// 最接近的祖先 ContextProvider 内包含的上下文。\nexport function useToolkitsContext() {\n return useContext(ToolkitsContext)\n}\n\nconst ContextProvider: FC<PropsWithChildren<Partial<ContextState>>> = ({ children, ...props }) => {\n const parentConfig = useToolkitsContext()\n\n const config = {\n ...parentConfig,\n ...props,\n }\n\n contextStore.setState(config)\n\n return <ToolkitsContext.Provider value={config}>{children}</ToolkitsContext.Provider>\n}\n\nContextProvider.displayName = 'ToolkitsContextProvider'\n\nexport default ContextProvider\n","import type { Locale } from '@/locales'\n\nconst locale: Locale = {\n noEntitlement: 'No permission, please contact the administrator.',\n name: 'Name',\n creationTime: 'Creation Time',\n operation: 'Operation',\n update: 'Update',\n edit: 'Edit',\n delete: 'Delete',\n selectAll: 'Select All',\n game: 'Game',\n user: 'User',\n role: 'Role',\n Login: {\n title: 'Login Method',\n thirdParty: 'Third Party Login',\n loginWithIDass: 'IDass Login',\n notRegistered: 'You are not yet registered on the platform, please contact the administrator',\n },\n NotFound: {\n subTitle: 'The page you visited does not exist',\n buttonText: 'Return to page',\n },\n FilterFormWrapper: {\n confirmText: 'Search',\n resetText: 'Reset',\n },\n FormModal: {\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n },\n GameSelect: {\n label: 'Current Game',\n placeholder: 'Please select a game',\n },\n RequireGame: {\n description: 'Please select a game',\n },\n UserWidget: {\n logoutText: 'Logout',\n },\n UserList: {\n createTitle: 'Create User',\n createSuccessfully: 'User created successfully',\n updateTitle: 'Update User',\n updateSuccessfully: 'User updated successfully',\n deleteTitle: 'Delete User',\n deleteContent: 'Are you sure you want to delete user <%= user %>?',\n deleteSuccessfully: 'User deleted successfully',\n },\n RoleList: {\n createTitle: 'Create Role',\n createSuccessfully: 'Role created successfully',\n updateTitle: 'Update Role',\n updateSuccessfully: 'Role updated successfully',\n deleteTitle: 'Delete Role',\n deleteContent: 'Are you sure you want to delete role <%= role %>?',\n deleteSuccessfully: 'Role deleted successfully',\n },\n PermissionList: {\n failedDescription: 'Failed to get permission list',\n baseSectionTitle: 'Platform Basic Permissions',\n gameSectionTitle: 'Game Permissions',\n gameSectionDescription: 'Please select a game first',\n gameSelectPlaceholder: 'Please select a game first',\n removeText: 'Remove',\n addText: 'Add Game Permissions',\n },\n RoleDetail: {\n title: 'Role Details',\n },\n}\n\nexport default locale\n","// eslint-disable-next-line camelcase\nimport en_GB from '@/locales/en_GB'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport { get, has, template } from 'lodash-es'\nimport type { Locale } from '@/locales'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const { locale = en_GB } = useToolkitsContext()\n\n return (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Button, Space, theme } from 'antd'\nimport type { Key, PropsWithChildren, ReactNode } from 'react'\nimport { useTranslation } from '@/utils/i18n'\n\nexport interface FilterFormWrapperProps extends PropsWithChildren {\n confirmText?: ReactNode\n onConfirm?: () => void | Promise<void>\n onReset?: () => void\n extras?: { key: Key; children: ReactNode }[]\n}\n\nconst FilterFormWrapper = (props: FilterFormWrapperProps) => {\n const { confirmText, extras, onConfirm, onReset, children } = props\n const { token } = theme.useToken()\n const t = useTranslation()\n\n const formStyle = {\n maxWidth: 'none',\n background: token.colorFillAlter,\n borderWidth: token.lineWidth,\n borderStyle: token.lineType,\n borderColor: token.colorBorder,\n borderRadius: token.borderRadiusLG,\n padding: 24,\n marginBottom: 24,\n }\n\n return (\n <div style={formStyle}>\n <div className=\"flex\">\n <div className=\"flex-1\">{children}</div>\n <div className=\"ml-8\">\n <Space>\n <Button type=\"primary\" onClick={onConfirm}>\n {confirmText || t('FilterFormWrapper.confirmText')}\n </Button>\n <Button htmlType=\"reset\" onClick={onReset}>\n {t('FilterFormWrapper.resetText')}\n </Button>\n {extras?.map(item => <span key={item.key}>{item.children}</span>)}\n </Space>\n </div>\n </div>\n </div>\n )\n}\n\nexport default FilterFormWrapper\n","import type { StateStorage } from 'zustand/esm/middleware'\n\n// 通过 SessionStorage 隔离数据,防止多开页面时的数据冲突\nexport const mixedStorage: StateStorage = {\n getItem: (name: string): string | null => {\n return sessionStorage.getItem(name) || localStorage.getItem(name)\n },\n setItem: (name: string, value: string) => {\n sessionStorage.setItem(name, value)\n localStorage.setItem(name, value)\n },\n removeItem: async (name: string) => {\n sessionStorage.removeItem(name)\n localStorage.removeItem(name)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { contextStore } from '@/components/ContextProvider'\nimport { useGameStore } from '@/components/GameSelect'\nimport { useTokenStore } from '@/stores/token'\nimport { pick } from 'lodash-es'\nimport type { StringifyOptions } from 'query-string'\nimport qs from 'query-string'\n\nexport class RequestError extends Error {\n status?: number\n\n constructor(opts?: { message?: string; status?: number }) {\n super(opts?.message)\n this.status = opts?.status\n }\n}\n\ntype JsonResponse<T> = (\n | {\n code: number\n status?: never\n }\n | {\n code?: never\n status: number\n }\n) & {\n data: T\n msg: string\n}\n\ninterface RequestOptions extends Omit<RequestInit, 'body'> {\n body?: Record<string | number, any> | FormData | null\n params?: Record<string | number, any> | URLSearchParams | null\n responseType?: 'json' | 'blob'\n isGlobalNS?: boolean\n}\n\ntype RequestResponse<T> = Pick<Response, 'headers' | 'status' | 'statusText' | 'url'> & { data: T }\n\nexport async function request<T = any>(url: string, opts?: RequestOptions): Promise<RequestResponse<T>> {\n let { body, params, headers, responseType = 'json', isGlobalNS, ...rest } = opts ?? {}\n\n const parsed = qs.parseUrl(url)\n const queryParams = Object.assign({}, parsed.query, params)\n const options: StringifyOptions = {\n skipNull: true,\n skipEmptyString: true,\n strict: true,\n encode: true,\n }\n const queryString = qs.stringify(queryParams, options)\n url = queryString ? `${parsed.url}?${queryString}` : url\n\n // 设置请求头\n headers = new Headers(headers)\n const token = useTokenStore.getState().token\n headers.set('Authorization', `Bearer ${token}`)\n\n if (!headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n if (contextStore.getState().usePermissionApiV2) {\n const game = useGameStore.getState().game\n\n if (isGlobalNS) {\n headers.set('App-ID', 'global')\n } else if (game) {\n headers.set('App-ID', game.id)\n }\n }\n\n if (responseType === 'blob') {\n headers.append('Accept', 'application/octet-stream')\n } else {\n headers.append('Accept', 'application/json')\n }\n\n const config = {\n ...rest,\n headers,\n body: body === null || body instanceof FormData ? body : JSON.stringify(body),\n }\n\n const response = await fetch(url, config)\n\n if (!response.ok) {\n throw new RequestError({ status: response.status })\n }\n\n const commonResponse = pick(response, ['headers', 'status', 'statusText', 'url'])\n\n if (responseType === 'blob') {\n const data = (await response.blob()) as T\n return {\n ...commonResponse,\n data,\n }\n }\n\n const json = (await response.json()) as JsonResponse<T>\n\n if (json.code === 0 || json.status === 0) {\n return { ...commonResponse, data: json.data }\n }\n\n throw new RequestError({ status: response.status, message: json.msg })\n}\n","import { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport jwtDecode from 'jwt-decode'\nimport { useNavigate } from 'react-router-dom'\nimport { useEffect, useState } from 'react'\nimport useSWRImmutable from 'swr/immutable'\nimport type { RequestError } from '@/utils/request'\nimport { request } from '@/utils/request'\nimport { useToolkitsContext } from '@/components/ContextProvider'\n\ninterface UserInfo {\n authorityId: string\n exp: number\n}\n\nexport interface TokenState {\n token: string\n getUser: () => UserInfo | null\n setToken: (token: string) => void\n clearToken: () => void\n}\n\nexport const useTokenStore = create<TokenState>()(\n persist(\n (set, get, store) => ({\n token: '',\n getUser: () => {\n try {\n return jwtDecode(get().token) as UserInfo\n } catch (_) {\n return null\n }\n },\n setToken: token => set({ token }),\n clearToken: () => {\n get().setToken('')\n store.persist.clearStorage()\n },\n }),\n {\n name: 'token',\n partialize: state => ({ token: state.token }),\n },\n ),\n)\n\nexport function useValidateToken() {\n const navigate = useNavigate()\n const { clearToken } = useTokenStore()\n const [validated, setValidated] = useState(false)\n const { usePermissionApiV2 } = useToolkitsContext()\n\n // 发送请求验证 token 是否有效,无效则跳转到登录页。\n useSWRImmutable(\n !validated && location.pathname !== '/login'\n ? usePermissionApiV2\n ? '/api/usystem/user/checkV2'\n : '/api/usystem/user/check'\n : null,\n (url: string) =>\n request(url, {\n method: 'post',\n body: { permissions: ['100001'] },\n }),\n {\n suspense: true,\n shouldRetryOnError: false,\n onError(err: RequestError) {\n if (err.status === 401) {\n clearToken()\n navigate('/login')\n } else if (err.status === 412) {\n clearToken()\n navigate('/login', { state: { notUser: true } })\n }\n },\n },\n )\n\n useEffect(() => {\n setValidated(true)\n }, [])\n}\n","import { Select, Space, Typography } from 'antd'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport useSWRImmutable from 'swr/immutable'\nimport { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport { mixedStorage } from '@/utils/storage'\nimport { useTranslation } from '@/utils/i18n'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport { useTokenStore } from '@/stores/token'\nimport { request } from '@/utils/request'\nimport { useSWRConfig } from 'swr'\n\nconst { Text } = Typography\n\nexport interface Game {\n id: string\n name: string\n area: 'cn' | 'global'\n Ctime: string\n}\n\nexport interface GameState {\n game: Game | null\n setGame: (game: Game | null) => void\n}\n\nexport const useGameStore = create<GameState>()(\n persist(\n set => ({\n game: null,\n setGame: game => set({ game }),\n }),\n {\n name: 'game',\n storage: createJSONStorage(() => mixedStorage),\n partialize: state => ({ game: state.game }),\n },\n ),\n)\n\nfunction useGames() {\n const { usePermissionApiV2 } = useToolkitsContext()\n const user = useTokenStore(state => state.getUser())\n\n const { data, isLoading } = useSWRImmutable(\n usePermissionApiV2 && user ? `/api/usystem/game/all?user=${user.authorityId}` : null,\n url => request<Game[]>(url, { isGlobalNS: true }).then(response => response.data),\n )\n\n return {\n games: data,\n isLoading,\n }\n}\n\nconst GameSelect = () => {\n const t = useTranslation()\n const { gameFilter } = useToolkitsContext()\n const { game, setGame } = useGameStore()\n const { games, isLoading } = useGames()\n const { mutate } = useSWRConfig()\n\n const options = useMemo(\n () =>\n (games ?? [])\n ?.filter(item => !gameFilter || gameFilter(item))\n ?.map(item => ({\n label: item.name,\n value: item.id,\n })),\n [games, gameFilter],\n )\n\n const clearCache = useCallback(() => {\n mutate(key => {\n return !(typeof key === 'string' && key.startsWith('/api/usystem/game/all'))\n })\n }, [mutate])\n\n const onGameChange = useCallback(\n async (id: string) => {\n const matchGame = (games ?? []).find(item => item.id === id)\n if (matchGame) {\n setGame(matchGame)\n clearCache()\n }\n },\n [games, setGame, clearCache],\n )\n\n useEffect(() => {\n if (!isLoading && (options.length === 0 || !options.some(item => item.value === game?.id))) {\n setGame(null)\n }\n }, [isLoading, game, options, setGame])\n\n return (\n <Space>\n <Text>{t('GameSelect.label')}</Text>\n <Select\n showSearch\n optionFilterProp=\"label\"\n value={game?.id}\n placeholder={t('GameSelect.placeholder')}\n loading={isLoading}\n style={{ width: '200px' }}\n options={options}\n onChange={onGameChange}\n />\n </Space>\n )\n}\n\nexport default GameSelect\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\n\nconst splitByTags = (str: string) => {\n const regex = /(<[^>]*>)/\n return str.split(regex).filter(part => part !== '')\n}\n\nfunction renderToString(node: ReactNode): Promise<string> {\n const container = document.createElement('div')\n const root = createRoot(container)\n\n return new Promise(resolve => {\n setTimeout(() => {\n flushSync(() => {\n root.render(node)\n })\n resolve(container.innerHTML)\n })\n })\n}\n\nexport interface HighlightTextsProps extends PropsWithChildren {\n texts: Array<string | number>\n}\n\nconst Highlight = (props: HighlightTextsProps) => {\n const { texts, children } = props\n const [htmlString, setHtmlString] = useState<string>('')\n\n useEffect(() => {\n renderToString(children).then(str => {\n const result = splitByTags(str)\n\n for (const text of texts) {\n for (let index = 0; index < result.length; index++) {\n // TODO: 忽略 HTML tag\n result[index] = result[index].replace(String(text), `<span style='color: #DC143C;'>${text}</span>`)\n }\n }\n\n setHtmlString(result.join(''))\n })\n }, [children, texts])\n\n return <p dangerouslySetInnerHTML={{ __html: htmlString }}></p>\n}\n\nexport default Highlight\n","import { useToolkitsContext } from '@/components/ContextProvider'\nimport { request } from '@/utils/request'\nimport useSWR from 'swr'\n\ntype PermissionCheckResult =\n | { has_all: true }\n | {\n [k: string]: boolean\n }\n\nexport function usePermissions(\n codes: string[],\n opts?: {\n isGlobalNS?: boolean\n suspense?: boolean\n },\n) {\n const { usePermissionApiV2 } = useToolkitsContext()\n\n const { data, isValidating, isLoading } = useSWR(\n codes.length > 0 ? [usePermissionApiV2 ? '/api/usystem/user/checkV2' : '/api/usystem/user/check', codes] : null,\n ([url]) =>\n request<PermissionCheckResult>(url, {\n method: 'post',\n body: {\n permissions: codes,\n },\n isGlobalNS: opts?.isGlobalNS,\n }).then(response => {\n if (response.data.has_all) {\n return codes.reduce(\n (acc, curr) => {\n acc[curr] = true\n return acc\n },\n {} as Record<string, boolean>,\n )\n }\n\n return codes.reduce(\n (acc, curr) => {\n acc[curr] = (response.data as Record<string, boolean>)[curr]\n return acc\n },\n {} as Record<string, boolean>,\n )\n }),\n {\n suspense: opts?.suspense,\n shouldRetryOnError: false,\n },\n )\n\n return { data, isValidating, isLoading }\n}\n\nexport function usePermission(\n code: string | undefined,\n opts?: {\n isGlobalNS?: boolean\n suspense?: boolean\n },\n) {\n const { data, isValidating, isLoading } = usePermissions(code ? [code] : [], opts)\n\n if (code === undefined) {\n return {\n accessible: true,\n isValidating: false,\n isLoading: false,\n }\n }\n\n return {\n accessible: data?.[code] ?? false,\n isValidating,\n isLoading,\n }\n}\n","import type { ButtonProps } from 'antd'\nimport { Button, Tooltip } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { useTranslation } from '@/utils/i18n'\nimport { usePermission } from '@/hooks/permission'\n\nexport interface PermissionButtonProps extends Omit<ButtonProps, 'disabled'> {\n code: string\n showLoading?: boolean\n isGlobalNS?: boolean\n}\n\nconst PermissionButton: FC<PropsWithChildren<PermissionButtonProps>> = props => {\n const { children, code, showLoading, isGlobalNS, ...restProps } = props\n const { accessible, isLoading } = usePermission(code, { isGlobalNS })\n const t = useTranslation()\n\n if (isLoading) {\n return (\n <Button loading={showLoading} disabled={!showLoading} {...restProps}>\n {children}\n </Button>\n )\n }\n\n if (!accessible) {\n return (\n <Tooltip defaultOpen={false} title={t('noEntitlement')}>\n <Button disabled {...restProps}>\n {children}\n </Button>\n </Tooltip>\n )\n }\n\n return <Button {...restProps}>{children}</Button>\n}\n\nexport default PermissionButton\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ListResponse } from '@/types'\nimport { mutate } from 'swr'\nimport type { MutatorCallback, MutatorOptions } from 'swr/_internal'\nimport { create } from 'zustand'\n\ntype QueryListMutator = <T = any>(\n key: string,\n payload?: Partial<{ page: number; size: number }>,\n data?: ListResponse<T> | Promise<ListResponse<T>> | MutatorCallback<ListResponse<T>>,\n opts?: MutatorOptions<ListResponse<T>>,\n) => void\n\nexport interface QueryListState {\n keyMap: Map<string, string | null>\n paginationMap: Map<string, { page: number; size: number }>\n mutate: QueryListMutator\n}\n\nexport const useQueryListStore = create<QueryListState>((set, get) => ({\n keyMap: new Map(),\n paginationMap: new Map(),\n mutate: (key, payload, data, opts) => {\n const { keyMap, paginationMap } = get()\n const swrKey = keyMap.get(key)\n const { page = 1, size = 10 } = paginationMap.get(key) ?? {}\n\n if (!payload || ((!payload.page || payload.page === page) && (!payload.size || payload.size === size))) {\n mutate(swrKey, data, opts)\n } else {\n set({\n paginationMap: new Map(paginationMap).set(key, {\n page: payload.page ?? page,\n size: payload.size ?? size,\n }),\n })\n }\n },\n}))\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport FilterFormWrapper from '@/components/FilterFormWrapper'\nimport { usePermission } from '@/hooks/permission'\nimport { useQueryListStore } from '@/stores/queryList'\nimport type { ListResponse } from '@/types'\nimport { useTranslation } from '@/utils/i18n'\nimport { request } from '@/utils/request'\nimport type { FormInstance } from 'antd'\nimport { Form, Result, Spin, Table } from 'antd'\nimport type { NamePath } from 'antd/es/form/interface'\nimport type { TableProps } from 'antd/es/table'\nimport qs from 'query-string'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react'\nimport useSWR, { useSWRConfig } from 'swr'\n\ntype RecursivePartial<T> = NonNullable<T> extends object\n ? {\n [P in keyof T]?: NonNullable<T[P]> extends (infer U)[]\n ? RecursivePartial<U>[]\n : NonNullable<T[P]> extends object\n ? RecursivePartial<T[P]>\n : T[P]\n }\n : T\n\nexport enum QueryListAction {\n Confirm = 'confirm',\n Reset = 'reset',\n Jump = 'jump',\n Init = 'init',\n}\n\nexport interface QueryListRef<Values = any> {\n form: FormInstance<Values>\n setFieldValue: (name: NamePath, value: any) => void\n setFieldsValue: (values: RecursivePartial<Values>) => void\n}\n\nconst fallbackData = {\n list: [],\n total: 0,\n}\n\nexport interface QueryListProps<Item = any, Values = any, Response = any>\n extends Pick<TableProps<Item>, 'columns' | 'rowKey' | 'tableLayout' | 'expandable' | 'rowSelection' | 'bordered'> {\n url: string\n renderForm?: (form: FormInstance<Values>) => ReactNode\n code?: string\n isGlobalNS?: boolean\n headers?: Record<string, string>\n // 把表单的值和分页数据转换成请求参数\n transformArg?: (page: number, size: number, values: Values | undefined) => unknown\n // 当请求的返回值不满足时进行转换\n transformResponse?: (response: Response) => ListResponse<Item>\n afterSuccess?: (response: ListResponse<Item>, action?: QueryListAction) => void\n confirmText?: ReactNode\n // 不分页\n noPagination?: boolean\n extra?: (response: Response | undefined, form: FormInstance<Values>) => ReactNode\n}\n\nconst InternalQueryList = <\n Item extends object,\n Values extends object | undefined,\n Response extends ListResponse<Item> = ListResponse<Item>,\n>(\n props: QueryListProps<Item, Values, Response>,\n ref: Ref<QueryListRef<Values>>,\n) => {\n const {\n url,\n code,\n confirmText,\n headers,\n isGlobalNS,\n noPagination,\n extra,\n renderForm,\n transformArg,\n transformResponse,\n afterSuccess,\n ...tableProps\n } = props\n const t = useTranslation()\n const [form] = Form.useForm<Values>()\n const { accessible, isLoading } = usePermission(code, { isGlobalNS })\n const action = useRef<QueryListAction>()\n const { mutate, paginationMap, keyMap } = useQueryListStore()\n const { page = 1, size = 10 } = paginationMap.get(url) ?? {}\n const [formValues, setFormValues] = useState<Values>()\n const [isValid, setIsValid] = useState(false)\n const [response, setResponse] = useState<Response>()\n\n const params =\n transformArg?.(page, size, formValues) ??\n (noPagination\n ? formValues\n : {\n ...formValues,\n page,\n size,\n })\n\n const _mutate = useCallback(\n (...args: Parameters<typeof mutate> extends [infer _, ...infer Rest] ? Rest : never) => mutate(url, ...args),\n [mutate, url],\n )\n\n const parsed = qs.parseUrl(url)\n const queryParams = Object.assign({}, parsed.query, params)\n const queryString = qs.stringify(queryParams)\n const swrKey = isValid ? `${parsed.url}?${queryString}` : null\n const { refreshInterval } = useSWRConfig()\n\n const {\n data,\n isLoading: isDataLoading,\n isValidating: isDataValidating,\n } = useSWR(\n swrKey,\n async key => {\n const _response = await request<Response>(key, { headers, isGlobalNS })\n setResponse(_response.data)\n const list = transformResponse?.(_response.data) ?? _response.data\n afterSuccess?.(list, action.current)\n action.current = undefined\n return list\n },\n {\n shouldRetryOnError: false,\n fallbackData,\n },\n )\n\n const onPaginationChange = async (currentPage: number, currentSize: number) => {\n action.current = QueryListAction.Jump\n _mutate({ page: currentPage, size: currentSize })\n }\n\n const pagination = noPagination\n ? false\n : {\n showSizeChanger: true,\n showQuickJumper: true,\n current: page,\n pageSize: size,\n total: data?.total,\n onChange: onPaginationChange,\n }\n\n const onConfirm = async () => {\n action.current = QueryListAction.Confirm\n setFormValues(form.getFieldsValue())\n\n try {\n await form.validateFields()\n _mutate({ page: 1 }, undefined, { revalidate: true })\n setIsValid(true)\n } catch (_) {\n _mutate({ page: 1 }, undefined, { revalidate: false })\n setIsValid(false)\n }\n }\n\n const refetch = async () => {\n form.resetFields()\n setFormValues(form.getFieldsValue())\n\n try {\n await form.validateFields()\n _mutate({ page: 1 }, undefined, { revalidate: true })\n setIsValid(true)\n } catch (_) {\n form.resetFields()\n _mutate({ page: 1 }, undefined, { revalidate: false })\n setIsValid(false)\n }\n }\n\n const onReset = () => {\n action.current = QueryListAction.Reset\n refetch()\n }\n\n useEffect(() => {\n if (accessible) {\n action.current = QueryListAction.Init\n refetch()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [accessible])\n\n useEffect(() => {\n keyMap.set(url, swrKey)\n }, [keyMap, swrKey, url])\n\n useImperativeHandle(ref, () => ({\n form,\n setFieldValue: (name: NamePath, value: any) => {\n form.setFieldValue(name, value)\n setFormValues(form.getFieldsValue())\n },\n setFieldsValue: (values: RecursivePartial<Values>) => {\n form.setFieldsValue(values)\n setFormValues(form.getFieldsValue())\n },\n }))\n\n if (isLoading) {\n return (\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n }}\n />\n )\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('noEntitlement')} />\n }\n\n return (\n <div>\n {renderForm ? (\n <FilterFormWrapper confirmText={confirmText} onReset={onReset} onConfirm={onConfirm}>\n {renderForm(form)}\n </FilterFormWrapper>\n ) : (\n <Form form={form} />\n )}\n {extra && <div className=\"mt-2 mb-4\">{extra(response, form)}</div>}\n <Table\n {...tableProps}\n dataSource={data?.list}\n loading={refreshInterval === 0 ? isDataValidating : isDataLoading}\n pagination={pagination}\n />\n </div>\n )\n}\n\nconst QueryList = forwardRef(InternalQueryList) as <\n Item extends object,\n Values extends object | undefined,\n Response = ListResponse<Item>,\n>(\n props: QueryListProps<Item, Values, Response> & { ref?: Ref<QueryListRef<Values>> },\n) => ReactElement\n\nexport default QueryList\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { FormInstance, ModalFuncProps } from 'antd'\nimport { Form, Modal } from 'antd'\nimport type { ReactNode } from 'react'\n\ntype RecursivePartial<T> = NonNullable<T> extends object\n ? {\n [P in keyof T]?: NonNullable<T[P]> extends (infer U)[]\n ? RecursivePartial<U>[]\n : NonNullable<T[P]> extends object\n ? RecursivePartial<T[P]>\n : T[P]\n }\n : T\n\nexport interface UseFormModalProps<Values>\n extends Omit<ModalFuncProps, 'icon' | 'className' | 'content' | 'type' | 'onOk' | 'onCancel'> {\n content?: (form: FormInstance<Values>) => ReactNode\n onConfirm?: (values: Values, form: FormInstance<Values>, extraValues: any) => Promise<void>\n onCancel?: (form: FormInstance<Values>) => void\n}\n\nexport function useFormModal<Values>(props: UseFormModalProps<Values>) {\n const { onConfirm, content, onCancel, ...restProps } = props\n const [modal, contextHolder] = Modal.useModal()\n const [form] = Form.useForm<Values>()\n\n const defaultProps: ModalFuncProps = {\n ...restProps,\n icon: null,\n className: 'toolkits-modal',\n content: content?.(form),\n }\n\n const show = (\n scopedProps?: Partial<\n Pick<UseFormModalProps<Values>, 'title'> & {\n initialValues?: RecursivePartial<Values>\n extraValues?: any\n }\n >,\n ) => {\n const { initialValues, extraValues, ...restScopedProps } = scopedProps ?? {}\n\n if (initialValues) {\n form.setFieldsValue(initialValues)\n }\n\n const onOk = async () => {\n const values = await form.validateFields()\n await onConfirm?.(values, form, extraValues)\n }\n\n return modal.confirm({\n ...defaultProps,\n ...restScopedProps,\n onOk,\n onCancel() {\n onCancel?.(form)\n },\n })\n }\n\n return {\n show,\n form,\n contextHolder: <div>{contextHolder}</div>,\n }\n}\n","export const SSO_URL = 'https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1'\n","import type { FC } from 'react'\n\nconst Default: FC = () => {\n return (\n <svg viewBox=\"0 0 1620 1028\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"a\"></g>\n <g id=\"b\">\n <g id=\"c\">\n <g>\n <path\n fill=\"#e8f2fa\"\n d=\"M1543.84,1025.63c-92.65,0-1442.29,.34-1443.07-2.11l-.13-.31s-.13-.3-.13-.45c-.52-1.23-207.95-345.42,114.53-585.03,126.18-93.75-7.9-155.64,92.44-260.01,115.31-119.94,241.15,12.74,369.38-41.64,22.66-9.6,45.39-25.05,68.15-48.76C797.78,32.37,870.19,6.95,944.96,1.25c143.27-10.86,304.51,50.23,387.71,139.53,16.75,17.98,92.93,111.03,32.88,238.91-37.91,80.74,120.91,157.86,177.35,250.06,143.49,234.42,2.24,392.82,.93,395.87Z\"\n ></path>\n <g opacity=\".5\">\n <g opacity=\".5\">\n <path\n fill=\"#a9c2ff\"\n d=\"M522.98,381s-10.51-89.31-55.62-142.6c-6-7.08-17.47-2.57-17.28,6.76,0,.16,0,.31,.01,.47,.58,15.93,51.09,83.13,72.89,135.37Z\"\n ></path>\n </g>\n <g opacity=\".5\">\n <path\n fill=\"#a9c2ff\"\n d=\"M528.46,406.57s-44.95-111.62-121.74-160.99c-4.68-3.01-11.02-1.92-14.16,2.72-2.04,3.02-2.96,7.73-.67,15.1,6.12,19.63,91.75,85.72,136.57,143.18Z\"\n ></path>\n </g>\n </g>\n <g>\n <path\n fill=\"#73b471\"\n d=\"M1088.4,378.19s-40.25-25.14-19.73-56.1c0,0,16.18-18.86,32.87-23.19,0,0-10.72,47-1.98,48.49,8.75,1.48,8.23-53.25,8.23-53.25,0,0,44.27-19.36,61.23-16.97,0,0-28.81,45.13-19.97,44.38,8.84-.75,40.96-46.29,40.96-46.29,0,0,44.84-6.49,50.9,20.56,6.05,27.05-6.03,39.94-12.69,41.34-6.66,1.4-48.94-.94-48.07,4.68,.87,5.62,29.08,15.74,45.22,11.39,0,0-19.38,43.29-42.36,40.09-22.99-3.2-29.54-17.99-43.78-19.7-14.24-1.71-24.84,1.75-17.85,5.95,6.98,4.2,31.27,2.59,42.4,13.03,11.13,10.43,20.22,16.96-1.39,20.52-21.61,3.56-59.96-.84-66.97-17.88l-7.01-17.04Z\"\n ></path>\n <g>\n <path\n fill=\"#73b471\"\n d=\"M1220.24,303.33s-116.93,33.06-131.84,74.86c0,0-.22,18.97-12.65,40.22l-.34,8.36s13.25-27.92,20-31.54c0,0-24.32-37.87,124.83-91.9Z\"\n ></path>\n <path\n fill=\"#73b471\"\n d=\"M1075.75,418.41s-18.91,26.66-10.13,60.45l4.63-1.05s-2.94-36.94,7.12-55.03c10.06-18.09-1.62-4.37-1.62-4.37Z\"\n ></path>\n </g>\n </g>\n <g>\n <path\n fill=\"#9bd399\"\n d=\"M925.53,377.18s-67.6,6.07-70.13-47.44c0,0,2.69-35.79,18.25-55.28,0,0,27.38,63.45,38.71,57.55,11.32-5.9-35.54-68.47-35.54-68.47,0,0,34.61-60.79,56.16-72.8,0,0,4.97,77.02,14.52,68.48,9.54-8.54,8.04-88.93,8.04-88.93,0,0,46.15-46.48,75.98-20.59,29.83,25.89,26.82,51.24,20.33,58.64-6.49,7.4-57.15,41.49-51.4,47.2,5.75,5.71,46.78-7.17,61.69-26.21,0,0,14.28,66.7-14.89,83.01-29.17,16.31-49.21,4.98-67.06,15.39-17.84,10.41-27.12,23.62-15.53,22.38,11.59-1.24,38.19-24.21,59.83-21.88,21.64,2.33,37.62,1.94,15.74,24.83-21.87,22.89-69.75,51.18-92.22,37.65l-22.48-13.53Z\"\n ></path>\n <g>\n <path\n fill=\"#9bd399\"\n d=\"M1014.06,176.32s-106.69,139.76-88.53,200.87c0,0,15.78,22.04,19.44,57.32l6.67,9.92s-8.34-43.67-3.63-53.71c0,0-60.01-22.45,66.05-214.39Z\"\n ></path>\n <path\n fill=\"#9bd399\"\n d=\"M944.97,434.5s.76,47.15,39.44,78.42l4.44-5.24s-34.61-39.97-38.32-69.55c-3.71-29.58-5.56-3.62-5.56-3.62Z\"\n ></path>\n </g>\n </g>\n <g>\n <g>\n <path\n fill=\"#b6cfff\"\n d=\"M290.34,904.31s-18.93-22.41-1.17-36.64c0,0,12.98-7.97,23.56-7.32,0,0-14.99,25.5-10.14,28.04,4.85,2.54,14.69-29.64,14.69-29.64,0,0,29.53-2.91,39.03,1.73,0,0-25.25,20.96-19.93,22.2,5.32,1.25,32.58-19.32,32.58-19.32,0,0,27.48,4.74,26.02,21.75-1.47,17.01-10.94,22.26-15.1,21.81-4.16-.45-28.51-9.88-29.04-6.42-.53,3.46,14.13,14.77,24.39,15.29,0,0-19.38,21.68-32.26,15.42-12.88-6.26-13.98-16.17-22.01-19.89-8.03-3.72-14.88-3.71-11.57,.08,3.31,3.79,17.84,7.48,22.43,15.72,4.59,8.24,8.71,13.79-4.61,11.76-13.32-2.03-34.98-11.92-35.93-23.25l-.95-11.32Z\"\n ></path>\n <g>\n <path\n fill=\"#b6cfff\"\n d=\"M381.48,885.57s-74.65-2.92-91.14,18.74c0,0-3.65,11.08-14.87,21.16l-1.75,4.83s12.94-13.84,17.56-14.67c0,0-7.24-26.83,90.19-30.06Z\"\n ></path>\n <path\n fill=\"#b6cfff\"\n d=\"M275.48,925.47s-16.02,12.02-17.14,33.5l2.91,.26s5.12-22.21,14.37-30.89c9.25-8.68-.14-2.87-.14-2.87Z\"\n ></path>\n </g>\n </g>\n <g>\n <path\n fill=\"#a9c2ff\"\n d=\"M224.15,876.13s30.12-17.11,16.06-40.33c0,0-11.24-14.26-23.29-17.92,0,0,6.42,34.62,0,35.44-6.43,.81-4.42-39.11-4.42-39.11,0,0-31.72-15.48-44.17-14.26,0,0,19.68,33.81,13.25,33-6.43-.81-28.51-35.03-28.51-35.03,0,0-32.53-6.11-37.75,13.44-5.22,19.55,3.21,29.33,8.03,30.55,4.82,1.22,35.74,.81,34.94,4.89-.8,4.07-21.69,10.59-33.33,6.92,0,0,12.85,32.18,29.72,30.55,16.87-1.63,22.09-12.22,32.53-13.03,10.44-.81,18.07,2.04,12.85,4.89-5.22,2.85-22.89,.93-31.32,8.21-8.43,7.27-15.26,11.75,.4,15.01,15.66,3.26,43.77,1.22,49.39-11l5.62-12.22Z\"\n ></path>\n <g>\n <path\n fill=\"#a9c2ff\"\n d=\"M130.18,817.47s84.33,27.7,93.97,58.66c0,0-.4,13.85,8.03,29.74v6.11s-8.83-20.78-13.65-23.63c0,0,18.87-26.88-88.35-70.88Z\"\n ></path>\n <path\n fill=\"#a9c2ff\"\n d=\"M232.18,905.87s13.01,20.03,5.59,44.42l-3.35-.91s3.25-26.86-3.56-40.37c-6.8-13.51,1.31-3.14,1.31-3.14Z\"\n ></path>\n </g>\n </g>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M272.06,852.53s-39.7-22.55-21.17-53.16c0,0,14.82-18.79,30.7-23.63,0,0-8.47,45.64,0,46.72,8.47,1.07,5.82-51.55,5.82-51.55,0,0,41.82-20.4,58.23-18.79,0,0-25.94,44.57-17.47,43.49,8.47-1.07,37.58-46.18,37.58-46.18,0,0,42.88-8.05,49.76,17.72,6.88,25.77-4.23,38.66-10.59,40.27-6.35,1.61-47.11,1.07-46.05,6.44,1.06,5.37,28.58,13.96,43.94,9.13,0,0-16.94,42.42-39.17,40.27-22.23-2.15-29.11-16.11-42.88-17.18-13.76-1.07-23.82,2.69-16.94,6.44,6.88,3.76,30.17,1.23,41.29,10.82,11.12,9.59,20.12,15.49-.53,19.79-20.64,4.3-57.7,1.61-65.11-14.5l-7.41-16.11Z\"\n ></path>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M395.93,775.21s-111.16,36.51-123.87,77.32c0,0,.53,18.26-10.59,39.2v8.05s11.65-27.39,18-31.14c0,0-24.88-35.44,116.46-93.43Z\"\n ></path>\n <path\n fill=\"#cedfff\"\n d=\"M261.48,891.73s-17.14,26.41-7.37,58.55l4.41-1.2s-4.28-35.41,4.69-53.21c8.97-17.81-1.73-4.14-1.73-4.14Z\"\n ></path>\n </g>\n </g>\n <path\n fill=\"#bbd3ff\"\n d=\"M270.72,1019.99c42.95,0,77.77-35.32,77.77-78.89H192.96c0,43.57,34.82,78.89,77.77,78.89Z\"\n ></path>\n <path\n fill=\"#bbd3ff\"\n d=\"M349.57,1024.01H191.88c0-5.37,4.3-9.73,9.59-9.73h138.49c5.3,0,9.59,4.36,9.59,9.73h0Z\"\n ></path>\n <rect fill=\"#80a1e6\" height=\"2.42\" width=\"159.86\" y=\"941.11\" x=\"190.4\"></rect>\n </g>\n <path\n fill=\"#768cee\"\n d=\"M801.19,578.05l-34.8,419.74s-3.65,25.44,15.01,25.49c30.68,.07,152.69,0,152.69,0,0,0-23.09-5.3-22.81-17.21,.33-14.05,40.67-431.99,40.67-431.99l-150.76,3.97Z\"\n ></path>\n <path\n fill=\"#a9c2ff\"\n d=\"M945.58,1015.66c-6.03,.02-124.16,.22-154.03-.17-13.02-.16-15.3-11.74-15.41-19.24-.05-3.59,.4-6.25,.4-6.25l.9-10.91,2.31-27.81,2.04-24.57,2.62-31.57,2.2-26.64,24.73-298.26,150.76-3.97s-16.99,174.91-29.01,302.22c-1.34,14.19-2.62,27.79-3.8,40.48-.38,4.05-.75,8.02-1.11,11.88-1.11,12.05-2.13,23.11-3.02,32.88-.47,5.15-.9,9.93-1.29,14.31-1.53,17.17-2.43,28.13-2.44,30.22,0,1.22,.1,2.35,.29,3.4,2.47,13.38,21.59,13.98,23.86,13.98Z\"\n ></path>\n <polygon\n fill=\"#a9c2ff\"\n points=\"435.05 349.47 519.82 694.86 531.43 742.16 570.91 903.04 1304.39 903.04 1158.87 349.47 435.05 349.47\"\n ></polygon>\n <polygon\n fill=\"#768cee\"\n points=\"435.05 349.46 423.31 353.44 555.29 915.06 570.91 903.04 435.05 349.46\"\n ></polygon>\n <polygon\n fill=\"#809bf5\"\n points=\"555.29 915.06 1284.26 915.06 1304.39 903.04 570.91 903.04 555.29 915.06\"\n ></polygon>\n <rect\n fill=\"#a9c2ff\"\n transform=\"translate(1780.4 2038.92) rotate(180)\"\n height=\"7.61\"\n width=\"157.83\"\n y=\"1015.66\"\n x=\"811.28\"\n ></rect>\n <polygon\n fill=\"#899bfa\"\n points=\"928.99 915.05 928.18 920.87 779.74 951.29 781.78 926.72 782.75 915.05 928.99 915.05\"\n ></polygon>\n <g opacity=\".5\">\n <path\n fill=\"#899bfa\"\n d=\"M945.58,1015.66c-6.03,.02-124.16,.22-154.03-.17-13.02-.16-15.3-11.74-15.41-19.24l147.73-28.19c-1.53,17.17-2.43,28.13-2.44,30.22,0,1.22,.1,2.35,.29,3.4,2.47,13.38,21.59,13.98,23.86,13.98Z\"\n ></path>\n </g>\n <polygon\n fill=\"#899bfa\"\n points=\"435.05 349.46 1158.87 349.46 1276.31 794.36 544.24 794.36 435.05 349.46\"\n ></polygon>\n <polygon\n fill=\"#5158bf\"\n points=\"1242.18 775.08 564.46 775.08 540.24 677.22 530.87 639.35 527.05 623.91 502.16 523.34 500.87 518.1 487.71 464.94 481.83 441.15 476.81 420.86 472.71 404.31 465.03 373.3 1132.98 373.3 1141.41 404.31 1145.91 420.86 1151.42 441.15 1157.88 464.94 1200.47 621.65 1200.47 621.65 1204.08 634.93 1205.76 641.09 1235.16 749.28 1242.18 775.08\"\n ></polygon>\n <polygon\n fill=\"#5d6cd2\"\n points=\"973.57 757.36 624.87 757.36 605.71 662.1 598.3 632.14 595.28 619.93 575.59 540.37 574.57 536.23 564.16 494.17 559.5 475.35 555.53 459.3 552.29 446.21 546.22 421.68 887.42 421.68 973.57 757.36\"\n ></polygon>\n <polygon fill=\"#899bfa\" points=\"819.24 794.36 571.16 904.34 544.24 794.36 819.24 794.36\"></polygon>\n <g>\n <path\n fill=\"#2a3967\"\n d=\"M1384.19,552.09c.04-.99,.79-11.66,16.82-12.22,0,0-7.88,.95-9.24,4.47,0,0,5.37-4.34,9.74-2.95,4.37,1.4,6.94,9.16,6.96,11.72,.03,2.55-2.4,10.79-5.18,11.49-1.05,.27-2.26,.19-3.36,0,.74,1.17,1.46,2.46,2.15,3.9,6.4,13.32-.2,26.33-5.61,24.89-3.47-.92-4.45,5.09-4.45,5.09l-33.74-27.7s12.39-26.01,25.91-18.69Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M1292.25,718.6c2.82,2.53,10.3-6.16,11.33-7.32,.05-.11,.11-.17,.11-.17l-2.28-6.44s-9.82-.38-11.44,1.27c-1.63,1.65-.81,9.96,2.28,12.65Z\"\n ></path>\n <path\n fill=\"#25468f\"\n d=\"M1372.45,944.42l7.17,2.71s31.12-43.79,34.96-82.31c.68-6.88-.72-21.46-.19-24.57,.25-1.45,.55-3.2,.89-5.21,1.01-5.88,2.4-13.93,4-23.09,3.66-21.09,8.41-48.04,12.09-67.85l-1.93-.63-20.89-6.84-4.32-13.91-15.56-4.15s-3.47,6.9-6.58,39.47c-.57,4.27-1.09,8.98-1.49,14.09-1.21,15.6-1.3,34.94,1.48,57.06,.71,5.66,3.67,27.92,3.33,34.81-1.57,31.49-12.96,80.44-12.96,80.44Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M1380.6,772.11l33.78,68.12c.25-1.45,.55-3.2,.89-5.21,1.01-5.88,2.4-13.93,4-23.09,3.66-21.09,8.41-48.04,12.09-67.85l-1.93-.63-20.89-6.84-4.32-13.91-15.56-4.15s-3.47,6.9-6.58,39.47c-.57,4.27-1.09,8.98-1.49,14.09Z\"\n ></path>\n <path\n fill=\"#25468f\"\n d=\"M1395.46,727.29l.78-6.8c13.1,3.53,48.1-9.86,48.1-9.86,0,0,12.69,11.32,11.03,38.44-.81,13.24-2.3,69.5-3.85,86.15-.56,6.03,3.3,21.56,4.85,25.75,15.23,41.17-2.35,91.87-2.35,91.87l-4.56-1.87s-28.85-106.12-31.83-117.36c-5.63-21.25-10.15-48.9-13.17-70.25-.42,.02-9.01-36.08-9.01-36.08Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M1385.52,648.37c22.52,1.25,17.57-32.81,16.2-32.63-2.76-1.46-7.7-8.55-10.56-20.41l-.97,.46-16.25,7.75s1.73,5.36,3,10.5c.99,4.02,1.71,7.9,1.11,8.98-1.28,.53-2.05,.86-2.05,.86,0,0,0,0,0,.02-.16,.42,3.52,24.15,9.53,24.48Z\"\n ></path>\n <path\n fill=\"#f99352\"\n d=\"M1373.93,603.53s1.73,5.36,3,10.5c9.5-2.69,12.38-12.82,13.25-18.25l-16.25,7.75Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M1371.93,609.21s22.73-5.34,19.23-19.64c-3.49-14.31-2.91-24.63-17.57-21.83-14.66,2.8-16.13,8.97-16.11,14.03,.02,5.06,8.45,28.46,14.45,27.44Z\"\n ></path>\n <path\n fill=\"#2a3967\"\n d=\"M1356.2,573.64c2.44-5.19,5.32-4.91,7.12-3.99,10.68-10.02,21.15-1.83,21.15-1.83,4.03,9.88,12.77,13.92,12.77,13.92,0,0-3.49,3.63-13.61,3.55-3.09-.02-6.2-1.46-9.03-3.45,5.45,5.57,11.85,8.97,11.85,8.97-12.67-2.46-21.16-17.34-22.03-18.92-1.07,1.61-3.13,5.03-3.3,7.92-.23,3.93,1.1,11.55-1.12,11.84,0,0-7.47-10.23-3.8-18Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M1427.51,956.62h36.09s.87-5.58-1.02-9.81c-1.81-4.06-4.64-5.91-3.96-10.82-2.29,2.4-6.03,5.08-11.25,4.37-.64,1.05-4.13,6.68-6.26,8.23-2.36,1.72-12.88,1.11-13.6,8.04Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M1350.02,956.62h36.09s1.35-5.84-1.02-9.81c-2.1-3.52-1.29-5.52,.26-8.43-1.64,.68-3.75,1.3-6.08,1.16-1.8-.1-3.7-.93-5.37-1.91-1.55,1.8-8.2,9.44-10.28,10.96-2.36,1.72-12.88,1.11-13.6,8.04Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M1445.02,667.38c-1.94-6.38-3.95-12.51-5.98-18.16-4.62-12.85-7.56-19.56-10.05-24.76-4.74-9.89-25.93-9.27-25.93-9.27-4.08,14.92-15.3,24.22-15.3,24.22-5.98-3.56-10.43-16.08-10.43-16.08l-13.09,7.06h0s-4.05,2.45-7.58,12.75c-5.25,15.32-13.77,37.08-19.68,43.73-1.38,1.55-5.42,3.9-10.31,6.39h0c-.11,.17-.19,.25-.24,.25,.32,.73,1.74,4.18,4.04,7.69,1.87,2.85,4.32,5.73,7.22,7.21,2.23-1.09,6.25-2.7,7.95-3.76,6.16-3.82,15.33-9.32,22.51-20.93l2,27.29,3.62,49.37c5.57,1.76,10.87,3.13,15.89,4.18,.33-4.14,1.65-9.09,1.65-9.09-.06,2.6,2.94,7.56,4.71,10.27,46.22,7.51,67.88-12.94,67.88-12.94-1.8-18.1-9.58-54.72-18.91-85.41Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M1398.39,612.43s3.84,.26,4.67,2.76c0,0-5.02,20.49-15.29,24.22l10.62-26.97Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M1387.77,639.4s-9.82-17.97-9.78-20.4c0,0-3.73,3.35-3.49,5.85,0,0,8.27,13.43,13.26,14.55Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M1414.09,632.11c-.28,.97-20.31,49.54-38.28,67.44-7.87,7.84,17.2,5.57,17.44,4.12,.24-1.46,20.84-71.56,20.84-71.56Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M1370.8,712.54l1.71,27.4c54.8-12.91,50.2-101.44,50.2-101.44l-27.52,57.64-24.15,16.01s-.09,.14-.25,.39Z\"\n ></path>\n <path\n fill=\"#a9c2ff\"\n d=\"M1326.37,693.41c.01,.06,.04,.09,.07,.09-.02-.04-.03-.08-.04-.1-.04-.09-.05-.09-.03,.01Z\"\n ></path>\n <g>\n <path\n fill=\"#ff912b\"\n d=\"M1353.48,655.68l10.91,49.33c1.74,7.86-4.13,14.22-13.1,14.22h-262c-8.97,0-17.65-6.37-19.39-14.22l-10.91-49.33c-.07-.3-.12-.6-.16-.9-1.13-7.44,4.63-13.32,13.26-13.32h262c8.63,0,16.99,5.88,19.15,13.32,.1,.3,.17,.6,.24,.9Z\"\n ></path>\n <g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1089.87 697 1087.3 697 1080.51 666.3 1083.08 666.3 1089.87 697\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1107.58 678.97 1089.17 678.97 1087.24 670.28 1105.66 670.28 1107.58 678.97\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1116.16 691.42 1091.92 691.42 1090 682.74 1114.24 682.74 1116.16 691.42\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1148.77 697 1146.2 697 1139.41 666.3 1141.98 666.3 1148.77 697\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1152.7 678.97 1134.29 678.97 1132.37 670.28 1150.78 670.28 1152.7 678.97\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1158.37 691.42 1134.13 691.42 1132.21 682.74 1156.45 682.74 1158.37 691.42\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1207.67 697 1205.1 697 1198.31 666.3 1200.88 666.3 1207.67 697\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1197.82 678.97 1179.4 678.97 1177.48 670.28 1195.89 670.28 1197.82 678.97\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1200.57 691.42 1176.33 691.42 1174.41 682.74 1198.65 682.74 1200.57 691.42\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1245.35 668.78 1215.1 668.78 1214.52 666.18 1244.78 666.18 1245.35 668.78\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1228.12 671.23 1232.26 689.91 1223.69 689.91 1219.56 671.23 1228.12 671.23\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1240.4 671.23 1245.84 695.82 1237.28 695.82 1231.84 671.23 1240.4 671.23\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1292.98 682.95 1262.72 682.95 1262.14 680.35 1292.4 680.35 1292.98 682.95\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1272.86 672.31 1276.99 690.99 1268.42 690.99 1264.29 672.31 1272.86 672.31\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1284.48 669.36 1289.92 693.94 1281.35 693.94 1275.91 669.36 1284.48 669.36\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1340.63 697.23 1310.37 697.23 1309.79 694.63 1340.05 694.63 1340.63 697.23\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1317.78 673.28 1321.91 691.96 1313.34 691.96 1309.21 673.28 1317.78 673.28\"\n ></polygon>\n <polygon\n fill=\"#e8f2fa\"\n points=\"1328.74 667.37 1334.18 691.96 1325.62 691.96 1320.18 667.37 1328.74 667.37\"\n ></polygon>\n </g>\n </g>\n </g>\n <g>\n <path\n fill=\"#ffae73\"\n d=\"M1327.16,714.82c2.99-.01,7.7-.22,10.42-1.28,0,0-8.7-.13-6.85-2.92,.34-.51,4.66-.12,9.49-.12,1.98,0,6.88,2.75,6.62,2.88,3.5-.47,6.68-1.16,7.71-1.38,.27-.06,.38-.11,.38-.11l3.09,9.13s-.65,.16-1.79,.38c-2.87,.72-8.79,2.26-14.37,4.46-7.81,3.14-13.55-.76-16.16-3.52-1.65-1.75-2.95-4.07-2.86-5.75,.1-1.84,2.5-1.76,4.32-1.77Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M1348.16,715.52l1.9,7.04s2.39-.44,6.18-1.16c1.14-.22,1.79-.39,1.79-.39,3.04-.6,6.67-1.43,10.63-2.31h.06c6.78-1.65,14.37-3.63,20.77-5.83,.57-.2,1.14-.41,1.69-.61,3.78-1.42-3.53-20.9-6.84-18.47-.88,.65-1.82,1.31-2.8,1.99-5.49,3.78-12.47,7.99-18.67,11.54-3.04,1.76-5.91,3.36-8.3,4.68-3.85,2.14-6.4,3.52-6.4,3.52Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M1381.53,695.79s-.4,13.3,11.88,19.77c14.19-5.2,21.78-26.66,27.64-41.4,.81-2.03,1.57-4.07,2.33-6.05,2.71-7.37,4.88-14.63,6.18-20.91,.81-3.74-14.97-22.61-16.97-18.15-3.09,7.09-6.34,16.28-9.38,25.41-1.68,5.01-3.31,10.01-4.94,14.63-.92,2.8-1.85,5.44-2.71,7.86-1.68,4.62-3.2,8.36-4.55,10.73-.87,1.54-3.36,3.69-6.67,6.11-.88,.65-1.82,1.31-2.8,1.99Z\"\n ></path>\n </g>\n </g>\n <polygon\n fill=\"#3c4aaa\"\n points=\"1141.41 404.31 472.71 404.31 465.03 373.3 1132.98 373.3 1141.41 404.31\"\n ></polygon>\n <g>\n <path\n fill=\"#e8f2fa\"\n d=\"M506.59,389.09c.87,2.78-.86,5.05-3.87,5.07-3.01,.02-6.16-2.22-7.03-4.99-.87-2.78,.86-5.05,3.87-5.07,3.01-.02,6.16,2.21,7.03,4.99Z\"\n ></path>\n <path\n fill=\"#e8f2fa\"\n d=\"M529.14,388.93c.87,2.78-.86,5.05-3.87,5.07-3.01,.02-6.16-2.21-7.03-4.99-.87-2.78,.86-5.05,3.87-5.07,3.01-.02,6.16,2.21,7.03,4.99Z\"\n ></path>\n <path\n fill=\"#e8f2fa\"\n d=\"M551.69,388.77c.87,2.78-.86,5.05-3.87,5.07-3.01,.02-6.16-2.21-7.03-4.99-.87-2.78,.86-5.05,3.87-5.07,3.01-.02,6.16,2.21,7.03,4.99Z\"\n ></path>\n </g>\n <path\n fill=\"#ff912b\"\n d=\"M559.5,475.35s78.71,.3,135.79,44.69c57.08,44.39,48.85,84.22,96.21,94.2,77.61,16.36,29.43-67.66,130.21-58.92l51.86,202.04h-348.7l-26.57-125.21-38.8-156.79Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M809.47,617.1c-5.34,0-11.34-.72-18.11-2.15-26.14-5.51-35.78-20.39-47.98-39.22-10.11-15.61-22.69-35.03-48.52-55.11-16.21-12.61-44.82-29.59-89.01-38.86-26.44-5.54-46.15-5.68-46.35-5.68v-1.46c.2,0,20.06,.14,46.64,5.72,24.54,5.15,60,16.11,89.59,39.13,26.02,20.24,38.68,39.77,48.85,55.47,12.49,19.28,21.51,33.21,47.07,38.59,36.4,7.67,44.63-6.84,54.16-23.64,10.62-18.71,22.66-39.93,75.97-35.3l-.12,1.45c-52.41-4.55-64.2,16.24-74.6,34.58-4.82,8.5-9.38,16.53-17.46,21.49-5.44,3.34-12.02,4.99-20.12,4.99Z\"\n ></path>\n <path\n fill=\"#fc7400\"\n d=\"M577.88,549.18l20.01,80.88,26.98,127.29h348.7l-17.58-66.1s-51.62-29.18-121.62-3.75c-70,25.44-147.49,1.96-152.48-55.25-5.62-64.51-64.06-95.58-104.01-83.08Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M665.98,587.45c-20.04-31.44-57-47.24-87.89-37.57l-.42-1.39c31.49-9.85,69.13,6.2,89.52,38.17l-1.21,.79Z\"\n ></path>\n <g>\n <polygon\n fill=\"#fff\"\n points=\"795.85 620.61 784.52 619.43 785.69 607.94 797.02 609.12 795.85 620.61\"\n ></polygon>\n <polygon\n fill=\"#fff\"\n points=\"892.8 636.61 701.9 596.39 702.28 594.51 893.18 634.73 892.8 636.61\"\n ></polygon>\n <path\n fill=\"#fff\"\n d=\"M698.84,595.11c.19-1.82,1.79-3.15,3.59-2.96,1.8,.19,3.1,1.82,2.92,3.64s-1.79,3.15-3.59,2.96c-1.8-.19-3.1-1.82-2.92-3.64Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M889.74,635.33c.19-1.82,1.79-3.15,3.59-2.96,1.8,.19,3.1,1.82,2.92,3.64-.19,1.82-1.79,3.15-3.59,2.96-1.8-.19-3.1-1.82-2.92-3.64Z\"\n ></path>\n </g>\n <g>\n <polygon\n fill=\"#fff\"\n points=\"656.9 504.31 648.61 496.38 656.42 487.98 664.71 495.9 656.9 504.31\"\n ></polygon>\n <polygon fill=\"#fff\" points=\"687.13 528 622.39 462.58 623.73 461.23 688.46 526.64 687.13 528\"></polygon>\n <path\n fill=\"#fff\"\n d=\"M620.52,459.81c1.14-1.42,3.2-1.64,4.6-.49,1.4,1.15,1.62,3.24,.48,4.67-1.14,1.42-3.2,1.64-4.6,.49-1.4-1.15-1.62-3.24-.48-4.67Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M685.26,525.23c1.14-1.42,3.2-1.64,4.6-.49s1.62,3.24,.48,4.67c-1.14,1.42-3.2,1.64-4.6,.49-1.4-1.15-1.62-3.24-.48-4.67Z\"\n ></path>\n </g>\n <g>\n <polygon\n fill=\"#fff\"\n points=\"882.44 557.53 877.99 568.16 867.5 563.65 871.96 553.01 882.44 557.53\"\n ></polygon>\n <polygon\n fill=\"#fff\"\n points=\"863.91 587.74 862.2 586.94 886.44 533.18 888.16 533.98 863.91 587.74\"\n ></polygon>\n <path\n fill=\"#fff\"\n d=\"M862,590.48c-1.71-.59-2.63-2.47-2.05-4.21,.58-1.74,2.44-2.66,4.15-2.08,1.71,.59,2.63,2.47,2.05,4.21-.58,1.74-2.44,2.66-4.15,2.08Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M886.25,536.72c-1.71-.59-2.63-2.47-2.05-4.21,.58-1.74,2.44-2.66,4.15-2.08,1.71,.59,2.63,2.47,2.05,4.21-.58,1.74-2.44,2.66-4.15,2.08Z\"\n ></path>\n </g>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M933.58,440.32l17.72,74.3c.76,3.18-2.2,5.76-6.61,5.76h-182.3c-4.41,0-8.6-2.58-9.35-5.76l-17.72-74.3c-.76-3.18,2.2-5.76,6.61-5.76h182.3c4.41,0,8.59,2.58,9.35,5.76Z\"\n ></path>\n <g>\n <g>\n <polygon\n fill=\"#25468f\"\n points=\"781.52 483.78 762.12 483.78 757.43 464.1 776.83 464.1 781.52 483.78\"\n ></polygon>\n <polygon\n fill=\"#25468f\"\n points=\"793.57 493.62 774.17 493.62 769.47 473.94 788.88 473.94 793.57 493.62\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#25468f\"\n points=\"826.82 483.78 807.42 483.78 802.72 464.1 822.12 464.1 826.82 483.78\"\n ></polygon>\n <g>\n <polygon\n fill=\"#6b98f6\"\n points=\"838.87 493.62 819.47 493.62 814.77 473.94 834.17 473.94 838.87 493.62\"\n ></polygon>\n <path\n fill=\"#183a76\"\n d=\"M839.9,494.47h-21.06l-5.1-21.36h21.06l5.1,21.36Zm-19.8-1.68h17.75l-4.29-18h-17.75l4.29,18Z\"\n ></path>\n </g>\n </g>\n <g>\n <polygon\n fill=\"#6b98f6\"\n points=\"872.12 483.78 852.71 483.78 848.02 464.1 867.42 464.1 872.12 483.78\"\n ></polygon>\n <path\n fill=\"#25468f\"\n d=\"M873.14,484.62h-21.06l-5.1-21.36h21.06l5.1,21.36Zm-19.8-1.68h17.75l-4.29-18h-17.75l4.29,18Z\"\n ></path>\n <polygon\n fill=\"#6b98f6\"\n points=\"884.16 493.62 864.76 493.62 860.07 473.94 879.47 473.94 884.16 493.62\"\n ></polygon>\n <path\n fill=\"#25468f\"\n d=\"M885.19,494.47h-21.06l-5.1-21.36h21.06l5.1,21.36Zm-19.8-1.68h17.75l-4.29-18h-17.75l4.29,18Z\"\n ></path>\n <polygon\n fill=\"#25468f\"\n points=\"873.14 484.58 861.71 484.58 858.97 473.1 870.4 473.1 873.14 484.58\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#25468f\"\n points=\"917.41 483.78 898.01 483.78 893.31 464.1 912.72 464.1 917.41 483.78\"\n ></polygon>\n <polygon\n fill=\"#25468f\"\n points=\"929.46 493.62 910.06 493.62 905.36 473.94 924.77 473.94 929.46 493.62\"\n ></polygon>\n <polygon\n fill=\"#6b98f6\"\n points=\"916.86 483.31 907.97 483.31 905.84 474.37 914.73 474.37 916.86 483.31\"\n ></polygon>\n </g>\n </g>\n </g>\n <g>\n <path\n fill=\"#3c4aaa\"\n d=\"M429.21,674.95h-67.18c-8.96,0-17.83-7.37-19.81-16.46l-50.55-231.5c-1.98-9.09,3.67-16.46,12.63-16.46h67.18c8.96,0,17.83,7.37,19.81,16.46l50.55,231.5c1.98,9.09-3.67,16.46-12.63,16.46Z\"\n ></path>\n <rect fill=\"#a9c2ff\" height=\".44\" width=\"99.62\" y=\"462.59\" x=\"299.49\"></rect>\n <rect fill=\"#a9c2ff\" height=\".44\" width=\"99.63\" y=\"517.14\" x=\"311.4\"></rect>\n <rect fill=\"#a9c2ff\" height=\".44\" width=\"99.63\" y=\"571.69\" x=\"323.31\"></rect>\n <path\n fill=\"#fff\"\n d=\"M360.43,446.51c.13-1.17-5.02-21.24-5.02-21.24l18.26,15.01-8.97-.32-4.27,6.56Z\"\n ></path>\n <path\n fill=\"#cedfff\"\n d=\"M415.47,651.23h-35.38l-7.83-35.84h35.38l7.83,35.84Zm-33.8-2h31.35l-6.95-31.85h-31.35l6.95,31.85Z\"\n ></path>\n <polygon\n fill=\"#ff7536\"\n points=\"390.05 630.85 356.68 630.85 349.29 597 382.66 597 390.05 630.85\"\n ></polygon>\n <polygon fill=\"#ff7536\" points=\"382 651.12 379.75 649.34 405.73 615.5 407.98 617.27 382 651.12\"></polygon>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M315.51,446.51c.13-1.17-5.02-21.24-5.02-21.24l18.26,15.01-8.97-.32-4.27,6.56Z\"\n ></path>\n <g>\n <polygon\n fill=\"#cedfff\"\n points=\"322.59 486.27 319.9 486.27 318.83 481.4 337.08 481.4 338.1 486.08 335.41 486.08 334.99 484.13 322.12 484.13 322.59 486.27\"\n ></polygon>\n <polygon\n fill=\"#cedfff\"\n points=\"332.96 498.16 330.27 498.16 326.91 482.76 329.6 482.76 332.96 498.16\"\n ></polygon>\n <polygon\n fill=\"#cedfff\"\n points=\"335.38 499.13 328.28 499.13 327.68 496.4 334.79 496.4 335.38 499.13\"\n ></polygon>\n </g>\n <polygon\n fill=\"#cedfff\"\n points=\"371.78 500.83 369.35 499.06 382.17 478.6 384.6 480.37 371.78 500.83\"\n ></polygon>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M340.97,548.52c-5.13,0-10.23-4.24-11.37-9.44-1.14-5.21,2.11-9.44,7.25-9.44s10.23,4.24,11.37,9.44c1.14,5.21-2.11,9.44-7.25,9.44Zm-3.58-16.39c-3.78,0-6.17,3.12-5.33,6.95,.84,3.83,4.59,6.95,8.37,6.95s6.17-3.12,5.33-6.95c-.84-3.83-4.59-6.95-8.37-6.95Z\"\n ></path>\n <path\n fill=\"#cedfff\"\n d=\"M358.69,556.72c-.32,0-.67-.13-.97-.38l-12.38-10.57c-.58-.5-.74-1.28-.36-1.76,.38-.48,1.17-.46,1.75,.03l12.38,10.57c.58,.5,.74,1.28,.36,1.76-.19,.23-.47,.35-.78,.35Z\"\n ></path>\n </g>\n <polygon\n fill=\"#cedfff\"\n points=\"385.5 528.76 390.11 537.32 398.98 537.32 392.96 542.61 397.57 551.16 389.24 545.87 383.22 551.16 384.09 542.61 375.76 537.32 384.63 537.32 385.5 528.76\"\n ></polygon>\n </g>\n </g>\n <g>\n <path\n fill=\"#fa8b79\"\n d=\"M1241.96,453.88s.24,13.48-1.75,13.23c-1.99-.25-4.7-11.3-4.72-11.14-.02,.17,.9,11.62-1.6,12.19-2.51,.57-5.05-12.13-5.05-12.13,0,0,1.68,10.9-.08,11.19-1.76,.29-4.54-10.28-5.27-10.31-.73-.03,2.34,9.06,.19,9.53-2.15,.46-6.94-12.33-5.32-13.96,1.62-1.63,4.15,.11,4.15,.11,0,0,3.12-2.35,5.52-1.02,0,0,5.62-1.14,7.31,1.39,0,0,3.51-3.06,6.61,.91Z\"\n ></path>\n <g>\n <path\n fill=\"#cedfff\"\n d=\"M1278.23,402.24l45.59,166.75c1.95,7.13-2.5,12.92-9.94,12.92h-307.72c-7.44,0-15.05-5.78-17-12.92l-45.59-166.75c-1.95-7.13,2.5-12.92,9.94-12.92h307.72c7.44,0,15.05,5.78,17,12.92Z\"\n ></path>\n <g>\n <polygon\n fill=\"#b0c0ff\"\n points=\"1038.92 477.47 999.17 477.47 988.15 437.16 1027.89 437.16 1038.92 477.47\"\n ></polygon>\n <polygon\n fill=\"#5158bf\"\n points=\"1026.48 467.6 1006.21 467.6 1000.59 447.03 1020.86 447.03 1026.48 467.6\"\n ></polygon>\n <polygon\n fill=\"#ff7536\"\n points=\"1000.44 478.4 997.91 476.54 1026.63 436.23 1029.16 438.08 1000.44 478.4\"\n ></polygon>\n <polygon\n fill=\"#ff7536\"\n points=\"1010.63 455.62 970.89 455.62 959.87 415.3 999.61 415.3 1010.63 455.62\"\n ></polygon>\n </g>\n <g>\n <polygon\n fill=\"#ff7536\"\n points=\"1033.21 525.04 1001.26 525.04 992.4 492.63 1024.35 492.63 1033.21 525.04\"\n ></polygon>\n <polygon\n fill=\"#fc7600\"\n points=\"1064.86 525.04 1032.91 525.04 1024.05 492.63 1056 492.63 1064.86 525.04\"\n ></polygon>\n <polygon\n fill=\"#ff8111\"\n points=\"1096.81 525.04 1064.86 525.04 1056 492.63 1087.95 492.63 1096.81 525.04\"\n ></polygon>\n <polygon\n fill=\"#6b98f6\"\n points=\"1128.76 525.04 1096.81 525.04 1087.95 492.63 1119.9 492.63 1128.76 525.04\"\n ></polygon>\n <polygon\n fill=\"#899bfa\"\n points=\"1160.71 525.04 1128.76 525.04 1119.9 492.63 1151.85 492.63 1160.71 525.04\"\n ></polygon>\n <polygon\n fill=\"#697ee3\"\n points=\"1192.66 525.04 1160.71 525.04 1151.85 492.63 1183.8 492.63 1192.66 525.04\"\n ></polygon>\n <polygon\n fill=\"#5158bf\"\n points=\"1224.61 525.04 1192.66 525.04 1183.8 492.63 1215.75 492.63 1224.61 525.04\"\n ></polygon>\n <polygon\n fill=\"#25468f\"\n points=\"1256.56 525.04 1224.61 525.04 1215.75 492.63 1247.7 492.63 1256.56 525.04\"\n ></polygon>\n <polygon\n fill=\"#a1b3ff\"\n points=\"1042.07 557.45 1010.12 557.45 1001.26 525.04 1033.21 525.04 1042.07 557.45\"\n ></polygon>\n <polygon\n fill=\"#899bfa\"\n points=\"1073.72 557.45 1041.77 557.45 1032.91 525.04 1064.86 525.04 1073.72 557.45\"\n ></polygon>\n <polygon\n fill=\"#5158bf\"\n points=\"1105.67 557.45 1073.72 557.45 1064.86 525.04 1096.81 525.04 1105.67 557.45\"\n ></polygon>\n <polygon\n fill=\"#25468f\"\n points=\"1137.62 557.45 1105.67 557.45 1096.81 525.04 1128.76 525.04 1137.62 557.45\"\n ></polygon>\n </g>\n <path\n fill=\"#ff8111\"\n d=\"M1258.13,429.21h-167.36c-2.3,0-4.7-1.91-5.34-4.24h0c-.64-2.33,.72-4.24,3.02-4.24h167.36c2.3,0,4.7,1.91,5.34,4.24h0c.64,2.33-.72,4.24-3.02,4.24Z\"\n ></path>\n <path\n fill=\"#6b98f6\"\n d=\"M1263.98,450.63h-167.36c-2.3,0-4.7-1.91-5.34-4.24h0c-.64-2.33,.72-4.24,3.02-4.24h167.36c2.3,0,4.7,1.91,5.34,4.24h0c.64,2.33-.72,4.24-3.02,4.24Z\"\n ></path>\n <path\n fill=\"#5158bf\"\n d=\"M1269.84,472.05h-167.36c-2.3,0-4.7-1.91-5.34-4.24h0c-.64-2.33,.72-4.24,3.02-4.24h167.36c2.3,0,4.7,1.91,5.34,4.24h0c.64,2.33-.72,4.24-3.02,4.24Z\"\n ></path>\n <g>\n <path\n fill=\"#5158bf\"\n d=\"M1062.31,418.73h5.04c2.65,0,4.59,1.44,5.2,3.65,.51,1.88-.29,3.01-1.75,3.47l4.24,4.34h-2.34l-3.9-4h-2.45l1.09,4h-1.99l-3.14-11.47Zm6.45,5.68c1.42,0,2.12-.75,1.79-1.95-.34-1.23-1.39-1.9-2.86-1.9h-2.89l1.05,3.85h2.91Z\"\n ></path>\n <path\n fill=\"#5158bf\"\n d=\"M1068.12,446.11c-.88-3.21,.8-5.93,4.21-5.93,1.97,0,3.33,.56,4.77,1.56l-.84,1.52c-1.08-.75-2.06-1.23-3.5-1.23-2.08,0-3.16,1.85-2.55,4.08,.64,2.36,2.65,4.1,4.96,4.1,1.07,0,1.94-.34,2.49-.87l-.59-2.15h-2.89l-.48-1.75h4.81l1.32,4.82c-.85,.97-2.23,1.79-4.23,1.79-3.54,0-6.56-2.56-7.48-5.93Z\"\n ></path>\n <path\n fill=\"#5158bf\"\n d=\"M1074.44,463.09h5.07c1.29,0,2.41,.36,3.23,1.02,.64,.51,1.07,1.13,1.29,1.93,.38,1.38-.2,2.11-.92,2.56,1.45,.46,2.58,1.23,3.01,2.82,.56,2.05-.8,3.15-3.32,3.15h-5.23l-3.14-11.47Zm5.99,4.83c1.28,0,1.99-.51,1.7-1.59-.25-.9-1.11-1.46-2.38-1.46h-2.86l.83,3.05h2.71Zm1.91,4.85c1.36,0,2.03-.54,1.74-1.61-.26-.97-1.18-1.54-2.75-1.54h-3.15l.86,3.15h3.29Z\"\n ></path>\n </g>\n </g>\n </g>\n <g>\n <g>\n <path\n fill=\"#ffae73\"\n d=\"M640.44,422.49c-.89,1.03-1,2.18-.56,3.41,0,0,0,.01,0,.02,.81,2.27,3.49,4.81,6.6,7.35,.4,.33,.75,.62,1.06,.9,.08,.07,.16,.14,.24,.22,.06,.06,.12,.11,.18,.17,2.9,2.71,1.81,3.34,7.03,8.85,5.95,6.28,10.04,6.39,11.21,5.82,.99-.49-1.02-3.82-3.23-7.56-.11-.18-.21-.36-.32-.55-.3-.5-.59-1-.88-1.5-2.6-4.5-1.93-6.62-1.32-13.32,.5-5.45,8.35-30.42,8.35-30.42l-11.4-1.99s-3.43,19.89-7.21,22.95c-2.02,1.63-4.29,1.65-6.23,2.86-.14,.08-.27,.17-.4,.26-1.1,.74-2.23,1.51-3.12,2.54Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M640.44,422.49c-.89,1.03-1,2.18-.56,3.41,0,0,0,.01,0,.02,.99,2.27,3.61,4.8,6.62,7.33,.39,.33,.74,.64,1.05,.92,.08,.07,.16,.14,.24,.22,.06,.06,.12,.11,.18,.17,2.9,2.71,1.81,3.34,7.03,8.85,5.95,6.28,10.04,6.39,11.21,5.82,.99-.49-1.02-3.82-3.23-7.56-1.16-.43-6.54-2.65-10.6-7.92-3.45-4.47-5.79-10.16-8.14-13.65-.26-.05-.41-.08-.67-.13-1.1,.74-2.23,1.51-3.12,2.54Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M732.33,415.27c.7,3.57,5.72,2.97,11.32,1.58,5.6-1.39,4.27,.26,12.24-.63,7.97-.9,10.39-3.91,10.63-5.11,.22-1.07-3.72-1.44-7.95-1.94-.53-.06-1.07-.13-1.6-.19-4.77-.61-8.26-3.73-12.6-6.29-4.1-2.43-10.23-12.33-10.23-12.33l-10.93,.88s5.74,8.84,7.96,12.68c1.31,2.26,1.24,5.25,1.07,7.56-.08,1.25-.17,2.54,.08,3.79Z\"\n ></path>\n <path\n fill=\"#1e3865\"\n d=\"M743.65,416.85c5.6-1.39,4.27,.26,12.24-.63,7.97-.9,10.39-3.91,10.63-5.11,.22-1.07-3.72-1.44-7.95-1.94l-.04,.08s-4.78,3.44-11.42,3.6c-5.41,.13-11.14-1.44-14.87-1.38-.08,1.25-.17,2.54,.08,3.79,.7,3.57,5.72,2.97,11.32,1.58Z\"\n ></path>\n <path\n fill=\"#f28018\"\n d=\"M690.43,344.35l-10.22,27.9-13.34,36.43s-3.62,.35-7.09-.66c-3.19-.94-6.86-3.39-6.86-3.39,0,0,3.71-39.12,10.62-61.57,1.77-5.76,3.76-10.43,5.95-13.05,10.72-12.85,20.95,14.33,20.95,14.33Z\"\n ></path>\n <path\n fill=\"#ff912b\"\n d=\"M680.04,300.04c-5.82-1.9-21-.03-37.47,2.99-4.55,.84-9.14-1.27-11.53-5.28h0l-41.44-3.28s-13.68,30.76-6.19,50.36c1.1,2.88,3.52,4.68,7.24,4.74h0s25.04,.04,33.05,.04c20.61,0,43.62-14.37,46.59-14.97,4.87-.99,6.82,8.89,11.69,19.27,4.87,10.38,45.79,45.96,45.79,45.96,0,0,6.29,.06,8.89-.92,2.79-1.06,3.82-2.44,3.82-2.44,0,0-45.34-91.51-60.45-96.45Z\"\n ></path>\n <path\n fill=\"#10294c\"\n d=\"M626.64,174.3c-3.08-1.86-6.08-2.14-7.92-2.09-1.28,.04-2.56-.05-3.82-.23-15.82-2.35-25.34,20.95-25.9,27.99-1.02,12.93-7.77,14.9-17.26,23-19.03,16.23-13.45,35.1-3.04,42.11,6.24,4.21,17.25,0,17.25,0,.16,.11,30.09-16.98,44.85-25.22,22.12-3.19,4.73-60.19-4.16-65.55Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M618.43,232.84c.06,.04-7.26,2.58-12.16,.38-4.61-2.07-8.1-9.76-8.03-9.76,2.1-.1,4.4-1.96,6.17-14.16l.89,.32,15.01,5.48s-1.09,4.89-1.79,9.54c-.59,3.91-.91,7.65-.09,8.2Z\"\n ></path>\n <path\n fill=\"#f9924f\"\n d=\"M620.31,215.1s-.6,2.64-1.47,7.56c-8.62-1.57-12.32-8.31-13.54-13.04l15.01,5.48Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M622.54,219.95s-20.53-2.8-18.62-15.74c1.91-12.95,.55-22.02,13.74-20.79,13.19,1.24,15,6.56,15.4,11.04,.4,4.48-5.13,25.88-10.52,25.49Z\"\n ></path>\n <path\n fill=\"#10294c\"\n d=\"M632.32,187.37s-13.15,11.49-22.09,12.42c-8.94,.93-12.33-1.98-12.33-1.98,0,0,5.27-4.44,8.44-11.6,.93-2.11,2.91-3.56,5.18-3.76,6.38-.56,18.49-.81,20.79,4.93Z\"\n ></path>\n <path\n fill=\"#10294c\"\n d=\"M624.1,186.34s4.4,4.31,5.78,7.51c1.34,3.09,1.74,10.47,.67,13.4,0,0,6.85-13.51,2.97-20.08-4.11-6.96-9.43-.84-9.43-.84Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M635.72,263.52c-.62,42.17-.17,33.35-4.72,37.36-1.1,.96-4.18,1.54-8.23,1.81-12.75,.86-35.15-1.27-36-3.66-2.94-8.27-.86-10.84-3.32-23.49-.26-1.35-.57-2.8-.94-4.39-2.05-8.69-4.04-11.65,3.22-25.62,6.58-12.65,13.42-22.92,14.03-22.55,17.36,10.45,18.76,1.67,18.76,1.67,0,0,17.51,18.31,17.2,38.88Z\"\n ></path>\n <path\n fill=\"#ff912b\"\n d=\"M680.21,372.25l-13.34,36.43s-3.62,.35-7.09-.66c-3.19-.94-6.86-3.39-6.86-3.39,0,0,3.71-39.12,10.62-61.57l16.67,29.18Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M618.52,224.64s17.86,3.07,19.96,10.87c2.1,7.8,9,55.16,9,55.16,0,0-5.04,4.99-9.23,.73-4.19-4.26-13.2-44.31-13.2-44.31l-6.53-22.46Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M622.77,302.69c-12.75,.86-35.15-1.27-36-3.66-2.94-8.27-.86-10.84-3.32-23.49l6.15-17.56s-1.02,19.55,4.67,24.7c5.68,5.14,23.28,9.93,26.04,14.23,1.33,2.06,2.21,4.13,2.47,5.79Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M608.17,294.46s12.57-2.84,14.6-1.71c2.03,1.13,6.99,5.25,7.61,6.69,.62,1.43-4.52-1.09-6.19-1.54-1.08-.29-3.93,.71-5.34,1.19-5.93,2.01-9.57,.97-9.57,.97l-1.11-5.6Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M599.74,222.97s-16.88,1.05-22.73,9.32c-8.23,11.64-24.55,61.25-15.2,67.87,10.53,7.45,47.95,1.95,47.95,1.95,0,0,1.24-5.9-.49-8.76-1.73-2.86-29.88-7.47-31.18-8.79-1.3-1.32,16.24-25.7,16.24-29.65s5.41-31.95,5.41-31.95Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M623.38,296.31s2.63,3.45,3.5,3.86c.86,.41,1.42,.31,1.42,.31l-1.78-3.24-3.14-.93Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M622.77,292.76l7.66,3.77s-.33,.54-1.27,.5c-.94-.04-3.32-.93-3.32-.93l-3.07-3.34Z\"\n ></path>\n </g>\n <g>\n <polygon\n fill=\"#10294c\"\n points=\"688.18 301.63 608.17 301.63 608.17 303.42 687.47 303.42 688.18 301.63\"\n ></polygon>\n <polygon\n fill=\"#10294c\"\n points=\"626.88 303.42 687.47 303.42 705.7 257.44 645.2 257.44 626.88 303.42\"\n ></polygon>\n <path\n fill=\"#e8f2fa\"\n d=\"M672.18,280.43c.46-1.62-.46-2.93-2.06-2.93s-3.26,1.31-3.71,2.93,.46,2.93,2.06,2.93,3.26-1.31,3.71-2.93Z\"\n ></path>\n </g>\n </g>\n <polygon\n fill=\"#fff\"\n points=\"666.18 584.13 672.4 589.62 666.99 595.92 660.77 590.43 666.18 584.13\"\n ></polygon>\n <g>\n <path\n fill=\"#f28018\"\n d=\"M586.7,695.57c-1.24-4.18-1.86-4.55-1.86-4.55,0,0-38.53,4.87-45.07,4.44-3.88-.25-50.15-15.91-50.15-15.91l-28.09,27.33s69.67,11.64,79.49,10.88c16.23-1.26,41-15.79,41-15.79,0,0,5.65-3.12,4.67-6.4Z\"\n ></path>\n <path\n fill=\"#104c82\"\n d=\"M481.4,1007.55s.54,13.24,3.05,16.46l34.88,.2c-.24-1.37-.39-4.52-5.21-5.38-6.09-1.08-13.25-5.39-16.94-13.56-3.88-8.6-15.77,2.27-15.77,2.27Z\"\n ></path>\n <path\n fill=\"#104c82\"\n d=\"M412.95,1005.64s-2.43,17.59,.87,17.9c.44,.04,14.05,.26,19.95,.36,6.93,.12,18.33-.13,18.33-.13,1.43,.06,2.37-1.51,1.64-2.77-.8-1.37-2.33-2.84-5.24-3.41-6.07-1.19-16.2-5.71-19.74-13.95-3.73-8.66-15.8,1.99-15.8,1.99Z\"\n ></path>\n <path\n fill=\"#6f7deb\"\n d=\"M499.53,825.34s-9.7,34.42-37.49,94.2c-27.79,59.78-29,88.58-29,88.58,0,0-4.21,1.51-9.79,.91-6.04-.65-10.3-3.39-10.3-3.39,0,0,1.8-71.15,14.93-101.31,13.13-30.17,15.8-112.71,15.8-112.71l55.84,33.73Z\"\n ></path>\n <path\n fill=\"#899bfa\"\n d=\"M515.1,795.72s.77,53.3-8.32,118.75c-9.09,65.44-4.84,95.88-4.84,95.88,0,0-2.41,1.78-9.82,1.75-8.68-.03-13.12-3.67-13.12-3.67,0,0-13.01-65.47-9.28-98.23,3.73-32.76-17.82-112.4-17.82-112.4l63.2-2.08Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M493.98,662.86c-.09,4.18-.64,8.74-2.29,10.97l-9.25,4.93-10.26-7.71s3.76-8.46,2.84-20.82c-.09-.74-.46-5.48-.46-5.58l5.13,2.6,13.93,7.06s0,.28,.09,.65c.09,1.4,.28,4.46,.28,7.9Z\"\n ></path>\n <path\n fill=\"#ff912b\"\n d=\"M442.72,802.31c3.36,15.58,75.23,8.74,74.29-.77-.04-.32-.22-4.72-.48-10.65-.54-12.83-1.38-32.89-1.48-34.45,0-.03,0-.05,0-.08-1.29-13.24-2.54-26.19-2.62-34.65-.07-7.34-1.07-14.84-2.39-21.65-1.22-6.29-2.72-11.99-4.03-16.44-.92-3.13-2.63-5.89-4.9-8.05-1.62-1.54-3.51-2.78-5.6-3.62-.57-.24-1.15-.44-1.74-.62-8.46-2.49-16.99-5.66-20.16-4.72-8.59,2.56-18.15,18-22.67,37.55-8.46,36.6-10.41,88-8.21,98.15Z\"\n ></path>\n <path\n fill=\"#ffa05e\"\n d=\"M493.98,662.86c-5.22-2.14-15.21-6.97-17.96-12.45-1.19-2.42,.64-3.16,3.66-3.16l13.93,7.06s0,.28,.09,.65c.09,1.4,.28,4.46,.28,7.9Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M500.32,653.44s-25.01,7.91-29.63-7.96c-4.62-15.87-10.96-25.54,4.82-31.27,15.77-5.72,20.65-.6,23.46,4.32,2.81,4.92,7.74,32.44,1.35,34.91Z\"\n ></path>\n <path\n fill=\"#0b3563\"\n d=\"M497.99,617s-1.59,18.47-5.36,17.67c-3.77-.8-7.18-1.4-6.63,4.17,.55,5.57,.73,12.26-10.88,13.25-11.61,.99-23.25-29.64-20.06-35.39,9.2-16.59,56.22-19.93,42.93,.3Z\"\n ></path>\n <path\n fill=\"#f28018\"\n d=\"M516.52,790.89c-.54-12.83-1.38-32.89-1.48-34.45,0-.03,0-.05,0-.08l-42.46-25.75s-1.64,60.11,43.95,60.29Z\"\n ></path>\n <g>\n <g>\n <path\n fill=\"#0b3563\"\n d=\"M663,586.79l7.65,6.75s-13.11,14.24-11.89,29.23l-19.58,16.77-16.21-14.32,13.56-22.81s14.53-.53,26.48-15.63Z\"\n ></path>\n <path\n fill=\"#fff\"\n d=\"M643.1,611.15c1.58-1.84,4.33-2.03,6.15-.43,1.81,1.6,2.01,4.39,.43,6.23-1.58,1.84-4.33,2.03-6.15,.43-1.81-1.6-2.01-4.39-.43-6.23Z\"\n ></path>\n <polygon\n fill=\"#fff\"\n points=\"644.37 617.69 643.11 616.58 666.23 589.63 667.49 590.74 644.37 617.69\"\n ></polygon>\n </g>\n <polygon\n fill=\"#6d76ff\"\n points=\"635.64 643.68 619.42 629.36 622.96 625.23 639.18 639.54 635.64 643.68\"\n ></polygon>\n <path\n fill=\"#0b3563\"\n d=\"M458.23,834.69l-.79-.69c-4.26-3.76-4.71-10.32-1-14.64l162.97-190,16.22,14.32-162.97,190c-3.71,4.32-10.17,4.78-14.43,1.02Z\"\n ></path>\n </g>\n <path\n fill=\"#ffae73\"\n d=\"M549.94,736.45s3.13-2.82,3.87-4.77c.25-.68,2.39-3.74,6.03-3.47,3.33,.25,9.24-6.94,9.24-6.94,.86,1.9,3.83,9.03-.42,12.65-3.47,2.95-11.81,8.05-16.87,11.41-5.44,3.61-1.85-8.88-1.85-8.88Z\"\n ></path>\n <path\n fill=\"#ff912b\"\n d=\"M550.35,735.4s-42.11,7.26-45.84,5.42c-5.96-2.94,2.31-46.28,2.31-46.28,0,0,.36-9.82-10.96-12.14-9.83-2.01-19.31,5.46-19.31,5.46,0,0-8.63,7.83-7.52,16.51,2.44,19.25,6.24,58.39,18.93,64.39,16.37,7.74,63.73-21.46,63.73-21.46,0,0,1.58-1.96,1.35-5.6-.2-3.21-2.7-6.3-2.7-6.3Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M588.46,698.68s10.63-3.93,9.69-9.44c-.94-5.51-4.25-4.82-6.25-2.92-2,1.9-.89,11.66-3.44,12.36Z\"\n ></path>\n <path\n fill=\"#ffae73\"\n d=\"M553.07,733.63s1.45-4.32,3-6.17c1.55-1.85,2.2-4.99,2.91-3.95,.7,1.05-.56,4.8,0,6.23,.56,1.43-5.9,3.89-5.9,3.89Z\"\n ></path>\n </g>\n <rect fill=\"#a9c2ff\" height=\"67.09\" width=\"190.42\" y=\"956.62\" x=\"1304.39\"></rect>\n <rect fill=\"#1e3865\" ry=\"2.37\" rx=\"2.37\" height=\"4.74\" width=\"1620\" y=\"1023.26\"></rect>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default Default\n","import { SSO_URL } from '@/constants'\nimport { AliyunOutlined } from '@ant-design/icons'\nimport { Alert, Button, Card, Col, Divider, Row, Space, Typography } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { Navigate, useLocation, useSearchParams } from 'react-router-dom'\nimport useSWRImmutable from 'swr/immutable'\nimport Default from './default'\nimport { useTokenStore } from '@/stores/token'\nimport { request } from '@/utils/request'\nimport { useTranslation } from '@/utils/i18n'\nimport { useToolkitsContext } from '@/components/ContextProvider'\n\nconst { Title } = Typography\n\nconst Login: FC<PropsWithChildren> = props => {\n const { children } = props\n const [searchParams] = useSearchParams()\n const location = useLocation()\n const { token, setToken } = useTokenStore()\n const t = useTranslation()\n const { localeDropdownMenu } = useToolkitsContext()\n\n useSWRImmutable(\n searchParams.has('ticket') ? `/api/usystem/user/login?ticket=${searchParams.get('ticket')}` : null,\n url => request<{ token: string }>(url),\n {\n suspense: true,\n onSuccess: data => {\n setToken(data.data.token)\n },\n },\n )\n\n if (token) {\n return <Navigate replace to=\"/\" />\n }\n\n return (\n <Row>\n {localeDropdownMenu && <div className=\"fixed top-8 right-8\">{localeDropdownMenu}</div>}\n <Col span={10} offset={3}>\n <div className=\"h-screen flex justify-end items-center\">\n <Default />\n </div>\n </Col>\n <Col span={5} offset={3}>\n <div className=\"h-screen relative\">\n <Card hoverable className=\"absolute left-0 right-0 top-1/2 -translate-y-1/2\">\n {location.state?.notUser && (\n <div className=\"absolute -top-12 left-0 right-0\">\n <Alert banner closable message={t('Login.notRegistered')} type=\"error\" />\n </div>\n )}\n <div className=\"text-center mb-6\">\n <Title level={5}>{t('Login.title')}</Title>\n <div className=\"min-h-10\">{children}</div>\n </div>\n <Divider plain>{t('Login.thirdParty')}</Divider>\n <div className=\"w-full flex justify-center\">\n <Space size=\"small\">\n <Button\n type=\"link\"\n size=\"small\"\n shape=\"round\"\n icon={<AliyunOutlined />}\n href={`${SSO_URL}/login?service=${encodeURIComponent(window.location.origin)}/login`}\n target=\"_self\"\n >\n {t('Login.loginWithIDass')}\n </Button>\n </Space>\n </div>\n </Card>\n </div>\n </Col>\n </Row>\n )\n}\n\nexport default Login\n","import { Button, Result } from 'antd'\nimport { useNavigate } from 'react-router-dom'\nimport { useTranslation } from '@/utils/i18n'\n\nconst NotFound = () => {\n const navigate = useNavigate()\n const t = useTranslation()\n return (\n <div className=\"h-screen flex justify-center items-center\">\n <Result\n status=\"404\"\n title=\"404\"\n subTitle={t('NotFound.subTitle')}\n extra={\n <Button\n type=\"primary\"\n onClick={() => {\n navigate('/')\n }}\n >\n {t('NotFound.buttonText')}\n </Button>\n }\n />\n </div>\n )\n}\n\nexport default NotFound\n","import useSWR from 'swr'\nimport useSWRMutation from 'swr/mutation'\nimport type { PermissionEnumItem, RoleEnumItem, RoleV1, RoleV2 } from '../types'\nimport type { Game } from '@/components/GameSelect'\nimport { usePermission } from '@/hooks/permission'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport { request } from '@/utils/request'\n\nexport function useAllPermissions() {\n return useSWR('/api/usystem/user/allPermssions', url =>\n request<PermissionEnumItem[]>(url, { isGlobalNS: true }).then(response => response.data),\n )\n}\n\nexport function useAllPermissionsV2() {\n return useSWR('/api/usystem/user/allPermissionsV2', url =>\n request<{\n game: Game[]\n permission: PermissionEnumItem[]\n }>(url, { isGlobalNS: true }).then(response => response.data),\n )\n}\n\nexport function useAllRoles() {\n const { accessible } = usePermission('200005', { isGlobalNS: true })\n return useSWR(accessible ? '/api/usystem/role/all' : null, url =>\n request<RoleEnumItem[]>(url, { isGlobalNS: true }).then(response => response.data),\n )\n}\n\nexport function useRole(name: string) {\n const { usePermissionApiV2 } = useToolkitsContext()\n return useSWR(`/api/usystem/role/${usePermissionApiV2 ? 'infoV2' : 'info'}?name=${name}`, (url: string) =>\n request<RoleV1 | RoleV2>(url, { isGlobalNS: true }).then(response => response.data),\n )\n}\n\nexport function useCreateRole() {\n const { usePermissionApiV2 } = useToolkitsContext()\n\n return useSWRMutation(\n usePermissionApiV2 ? '/api/usystem/role/createV2' : '/api/usystem/role/create',\n (\n url: string,\n {\n arg,\n }: {\n arg: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useUpdateRole() {\n const { usePermissionApiV2 } = useToolkitsContext()\n\n return useSWRMutation(\n usePermissionApiV2 ? '/api/usystem/role/updateV2' : '/api/usystem/role/update',\n (\n url: string,\n {\n arg,\n }: {\n arg: { id: number; name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useRemoveRole() {\n return useSWRMutation(\n '/api/usystem/role/delete',\n (\n url,\n {\n arg,\n }: {\n arg: { id: number; name: string }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useCreateUser() {\n return useSWRMutation(\n '/api/usystem/user/create',\n (\n url,\n {\n arg,\n }: {\n arg: { name: string; roles: string[] }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useUpdateUser() {\n return useSWRMutation(\n '/api/usystem/user/update',\n (\n url,\n {\n arg,\n }: {\n arg: { id: string; name: string; roles: string[] }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n\nexport function useRemoveUser() {\n return useSWRMutation(\n '/api/usystem/user/delete',\n (\n url,\n {\n arg,\n }: {\n arg: { id: string; name: string }\n },\n ) =>\n request(url, {\n method: 'post',\n body: arg,\n isGlobalNS: true,\n }),\n )\n}\n","import type { PermissionEnumItem } from '@/features/permission'\nimport { useTranslation } from '@/utils/i18n'\nimport { Checkbox, Col, Collapse, Row } from 'antd'\nimport type { CheckboxChangeEvent } from 'antd/es/checkbox'\nimport type { FC } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\n\ninterface PermissionCollapseProps {\n expand?: boolean\n permissions?: PermissionEnumItem[]\n readonly?: boolean\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst PermissionCollapse: FC<PermissionCollapseProps> = props => {\n const { permissions, readonly, expand, value, onChange } = props\n const [activeKey, setActiveKey] = useState<string[]>([])\n const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>({})\n const [internalValue, setInternalValue] = useState<string[]>(value ?? [])\n const t = useTranslation()\n\n const onCollapseChange = useCallback((key: string | string[]) => {\n setActiveKey(key as string[])\n }, [])\n\n const getCheckedValue = (checkedValue: boolean, codes: string[]) => {\n let tempValue: string[] = []\n\n if (checkedValue) {\n tempValue = [...new Set(internalValue.concat(codes))]\n } else {\n tempValue = internalValue.slice()\n\n codes.forEach(code => {\n const index = tempValue.findIndex(item => item === code)\n if (index > -1) {\n tempValue.splice(index, 1)\n }\n })\n }\n\n return tempValue\n }\n\n const onCheckChange = (e: CheckboxChangeEvent, codes: string[]) => {\n const checkedValue = getCheckedValue(e.target.checked, codes)\n setInternalValue(checkedValue)\n onChange?.(checkedValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? [])\n }, [value])\n\n useEffect(() => {\n if (expand) {\n setActiveKey((permissions ?? []).map(({ category }) => category))\n }\n }, [expand, permissions])\n\n useEffect(() => {\n const checkedValue = (permissions ?? []).reduce(\n (acc, curr) => {\n acc[curr.category] = curr.permissions.every(item => internalValue?.includes(item.value))\n return acc\n },\n {} as Record<string, boolean>,\n )\n\n setCheckedMap(checkedValue)\n }, [internalValue, permissions])\n\n return (\n <Collapse\n style={{ width: '100%' }}\n collapsible=\"header\"\n activeKey={activeKey}\n items={(permissions ?? []).map(item => ({\n key: item.category,\n label: item.category,\n extra: !readonly && (\n <Checkbox\n checked={checkedMap[item.category]}\n onChange={e => {\n onCheckChange(\n e,\n item.permissions.map(permission => permission.value),\n )\n }}\n >\n {t('selectAll')}\n </Checkbox>\n ),\n children: (\n <Checkbox.Group style={{ width: '100%' }} value={internalValue} disabled={readonly}>\n <Row gutter={[10, 10]} style={{ width: '100%' }}>\n {item.permissions.map(permission => (\n <Col key={permission.value} span={6}>\n <Checkbox\n value={permission.value}\n onChange={e => {\n onCheckChange(e, [permission.value])\n }}\n >\n {permission.label}\n </Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n ),\n }))}\n onChange={onCollapseChange}\n />\n )\n}\n\nexport default PermissionCollapse\n","import { Skeleton, Typography } from 'antd'\nimport { useAllPermissions } from '../../hooks'\nimport PermissionCollapse from '../PermissionCollapse'\nimport type { RoleV1 } from '../../types'\nimport type { PermissionListPropsBase } from '../PermissionList'\nimport type { FC } from 'react'\nimport { useTranslation } from '@/utils/i18n'\n\nconst { Text } = Typography\n\ninterface PermissionListV1Props extends PermissionListPropsBase {\n value?: RoleV1['permissions']\n onChange?: (checkedValue: RoleV1['permissions']) => void\n}\n\nconst PermissionListV1: FC<PermissionListV1Props> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permissions, isLoading, error } = useAllPermissions()\n const t = useTranslation()\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n return (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value}\n permissions={permissions}\n readonly={readonly}\n expand={expand}\n onChange={onChange}\n />\n </Skeleton>\n )\n}\n\nexport default PermissionListV1\n","import { Button, Card, Divider, Empty, Select, Skeleton, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useState } from 'react'\nimport type { RoleV2 } from '../../types'\nimport { useAllPermissionsV2 } from '../../hooks'\nimport PermissionCollapse from '../PermissionCollapse'\nimport type { PermissionListPropsBase } from '../PermissionList'\nimport { useTranslation } from '@/utils/i18n'\n\nconst { Text } = Typography\nconst { Option } = Select\n\ninterface PermissionListV2Props extends PermissionListPropsBase {\n value?: RoleV2['permissions']\n onChange?: (checkedValue: RoleV2['permissions']) => void\n}\n\nconst PermissionListV2: FC<PermissionListV2Props> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: { permission, game: games } = {}, isLoading, error } = useAllPermissionsV2()\n const [gameList, setGameList] = useState<{ gameId: string; permissions: string[] }[]>([])\n const globalPermissions = permission?.filter(item => item.is_common)\n const gamePermissions = permission?.filter(item => !item.is_common)\n const t = useTranslation()\n\n useEffect(() => {\n const list: { gameId: string; permissions: string[] }[] = []\n\n Object.keys(value ?? {}).forEach(key => {\n if (key !== 'global') {\n list.push({ gameId: key, permissions: value?.[key] ?? [] })\n }\n })\n\n setGameList(list)\n }, [value])\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n const addGame = () => {\n setGameList(prev => [...prev, { gameId: '', permissions: [] }])\n }\n\n const removeGame = (index: number) => {\n setGameList(prev => prev.filter((_, i) => i !== index))\n }\n\n return (\n <div className=\"flex flex-col w-full\">\n <div className=\"mb-12\">\n <Divider dashed>{t('PermissionList.baseSectionTitle')}</Divider>\n </div>\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.global}\n readonly={readonly}\n permissions={globalPermissions}\n expand={expand}\n onChange={newValue => {\n onChange?.({\n ...value,\n global: newValue,\n })\n }}\n />\n </Skeleton>\n <div className=\"my-12\">\n <Divider dashed>{t('PermissionList.gameSectionTitle')}</Divider>\n </div>\n {gameList.map((item, index) => (\n <Card\n title={\n <Space>\n <Text>{t('game')}</Text>\n {readonly ? (\n <Text>{games?.find(game => game.id === item.gameId)?.name}</Text>\n ) : (\n <Select\n disabled={readonly}\n value={gameList[index].gameId || undefined}\n style={{ width: '160px' }}\n placeholder={t('PermissionList.gameSelectPlaceholder')}\n onChange={selectedValue => {\n setGameList(pev => {\n const temp = pev.slice()\n temp[index].gameId = selectedValue\n return temp\n })\n }}\n >\n {games?.map(game => (\n <Option key={game.id} value={game.id} disabled={gameList.some(({ gameId }) => gameId === game.id)}>\n {game.name}\n </Option>\n ))}\n </Select>\n )}\n </Space>\n }\n key={index}\n className=\"mb-6\"\n extra={\n !readonly && (\n <Button\n type=\"link\"\n onClick={() => {\n removeGame(index)\n }}\n >\n {t('PermissionList.removeText')}\n </Button>\n )\n }\n >\n {gameList[index].gameId ? (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.[gameList[index].gameId]}\n readonly={readonly}\n expand={expand}\n permissions={gamePermissions}\n onChange={newValue => {\n onChange?.({\n ...value,\n [gameList[index].gameId]: newValue,\n })\n }}\n />\n </Skeleton>\n ) : (\n <Empty description={t('PermissionList.gameSectionDescription')} />\n )}\n </Card>\n ))}\n {!readonly && (\n <Button block type=\"dashed\" onClick={addGame}>\n {t('PermissionList.addText')}\n </Button>\n )}\n </div>\n )\n}\n\nexport default PermissionListV2\n","import { useToolkitsContext } from '@/components/ContextProvider'\nimport type { RoleV1, RoleV2 } from '@/features/permission'\nimport type { FC } from 'react'\nimport PermissionListV1 from '../PermissionListV1'\nimport PermissionListV2 from '../PermissionListV2'\n\nexport interface PermissionListPropsBase {\n expand?: boolean\n readonly?: boolean\n}\n\ninterface PermissionListProps extends PermissionListPropsBase {\n value?: RoleV1['permissions'] | RoleV2['permissions']\n onChange?: (checkedValue: RoleV1['permissions'] | RoleV2['permissions']) => void\n}\n\nconst PermissionList: FC<PermissionListProps> = (props: PermissionListProps) => {\n const { value } = props\n const { usePermissionApiV2 } = useToolkitsContext()\n\n return (\n <>\n {usePermissionApiV2 ? (\n <PermissionListV2 {...props} value={value as RoleV2['permissions']} />\n ) : (\n <PermissionListV1 {...props} value={value as RoleV1['permissions']} />\n )}\n </>\n )\n}\n\nexport default PermissionList\n","export interface PermissionEnumItem {\n category: string\n is_common?: boolean\n permissions: {\n label: string\n value: string\n route: string\n }[]\n}\n\nexport interface RoleEnumItem {\n id: string\n name: string\n}\n\nexport interface RoleListItem {\n id: number\n name: string\n ctime: string\n}\n\nexport interface RoleV1 {\n id: number\n name: string\n ctime: string\n permissions: string[]\n}\n\nexport interface RoleV2 {\n id: number\n name: string\n ctime: string\n permissions: Record<string, string[]>\n}\n\nexport interface UserListItem {\n id: string\n name: string\n ctime: string\n roles: string[]\n}\n","import PermissionList from './components/PermissionList'\n\nexport * from './hooks'\nexport * from './types'\nexport { PermissionList }\n","import Highlight from '@/components/Highlight'\nimport PermissionButton from '@/components/PermissionButton'\nimport QueryList from '@/components/QueryList'\nimport type { UserListItem } from '@/features/permission'\nimport { useAllRoles, useCreateUser, useRemoveUser, useUpdateUser } from '@/features/permission'\nimport { useFormModal } from '@/hooks/formModal'\nimport { useQueryListStore } from '@/stores/queryList'\nimport { useTranslation } from '@/utils/i18n'\nimport { UserAddOutlined } from '@ant-design/icons'\nimport type { TableColumnsType } from 'antd'\nimport { App, Card, Col, Form, Input, Row, Select, Space, Tag } from 'antd'\nimport { produce } from 'immer'\nimport type { FC } from 'react'\nimport { Link } from 'react-router-dom'\n\nconst { Option } = Select\n\nexport const url = '/api/usystem/user/list'\n\nfunction useCreatingUserModal() {\n const { message } = App.useApp()\n const create = useCreateUser()\n const { data: roles, isLoading } = useAllRoles()\n const { mutate } = useQueryListStore()\n const t = useTranslation()\n\n return useFormModal<{ id: string; name: string; roles: string[] }>({\n title: t('UserList.createTitle'),\n content: form => (\n <Form form={form} labelCol={{ flex: '80px' }}>\n <Form.Item label={t('name')} name=\"name\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label={t('role')} name=\"roles\">\n <Select allowClear mode=\"multiple\" loading={isLoading}>\n {(roles ?? []).map(role => (\n <Option value={role.name} key={role.id}>\n {role.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Form>\n ),\n async onConfirm(values) {\n await create.trigger(values)\n mutate(url, { page: 1 })\n message.success(t('UserList.createSuccessfully'))\n },\n })\n}\n\nfunction useUpdatingUserModal() {\n const { message } = App.useApp()\n const update = useUpdateUser()\n const { data: roles, isLoading } = useAllRoles()\n const { mutate } = useQueryListStore()\n const t = useTranslation()\n\n return useFormModal<{ id: string; name: string; roles: string[] }>({\n title: t('UserList.updateTitle'),\n content: form => (\n <Form form={form} labelCol={{ flex: '80px' }}>\n <Form.Item hidden name=\"id\">\n <Input />\n </Form.Item>\n <Form.Item label={t('name')} name=\"name\" rules={[{ required: true }]}>\n <Input readOnly />\n </Form.Item>\n <Form.Item label={t('role')} name=\"roles\">\n <Select allowClear mode=\"multiple\" loading={isLoading}>\n {(roles ?? []).map(role => (\n <Option value={role.name} key={role.id}>\n {role.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Form>\n ),\n async onConfirm(values) {\n await update.trigger(values)\n mutate(\n url,\n undefined,\n prev =>\n produce(prev, draft => {\n const match = draft?.list?.find(item => item.id === values.id)\n\n if (match) {\n match.roles = values.roles\n }\n }),\n { revalidate: false },\n )\n message.success(t('UserList.updateSuccessfully'))\n },\n })\n}\n\nconst UserList: FC = () => {\n const { modal, message } = App.useApp()\n const remove = useRemoveUser()\n const { mutate } = useQueryListStore()\n const { show: showCreatingModal, contextHolder: creatingContextHolder } = useCreatingUserModal()\n const { show: showUpdatingModal, contextHolder: updatingContextHolder } = useUpdatingUserModal()\n const t = useTranslation()\n\n const columns: TableColumnsType<UserListItem> = [\n {\n title: t('name'),\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n },\n {\n title: t('role'),\n dataIndex: 'roles',\n key: 'roles',\n width: '40%',\n render(value: string[]) {\n return (\n <Row gutter={[4, 4]}>\n {(value || []).map((item: string) => (\n <Col key={item}>\n {item === 'root' ? (\n <Tag color=\"#f50\">{item}</Tag>\n ) : (\n <Tag color=\"#ff5a00\">\n <Link to={`/permission/role/${item}`}>{item}</Link>\n </Tag>\n )}\n </Col>\n ))}\n </Row>\n )\n },\n },\n {\n title: t('creationTime'),\n dataIndex: 'Ctime',\n key: 'ctime',\n },\n {\n title: t('operation'),\n width: 150,\n align: 'center',\n render: (value: UserListItem) => (\n <Space>\n <PermissionButton\n isGlobalNS\n size=\"small\"\n type=\"link\"\n code=\"100003\"\n onClick={() => {\n showUpdatingModal({\n initialValues: {\n id: value.id,\n name: value.name,\n roles: value.roles,\n },\n })\n }}\n >\n {t('update')}\n </PermissionButton>\n <PermissionButton\n isGlobalNS\n danger\n size=\"small\"\n code=\"100004\"\n type=\"link\"\n onClick={() => {\n modal.confirm({\n title: t('UserList.deleteTitle'),\n content: (\n <Highlight texts={[value.name]}>{t('UserList.deleteContent', { user: value.name })}</Highlight>\n ),\n async onOk() {\n await remove.trigger({\n id: value.id,\n name: value.name,\n })\n mutate(url, undefined, prev => {\n return produce(prev, draft => {\n const index = draft?.list?.findIndex(item => item.id === value.id)\n if (index) {\n draft?.list?.splice(index, 1)\n }\n })\n })\n message.success(t('UserList.deleteSuccessfully'))\n },\n })\n }}\n >\n {t('delete')}\n </PermissionButton>\n </Space>\n ),\n },\n ]\n\n return (\n <Card\n title={t('user')}\n extra={\n <PermissionButton\n isGlobalNS\n type=\"primary\"\n icon={<UserAddOutlined />}\n code=\"100002\"\n onClick={() => {\n showCreatingModal()\n }}\n >\n {t('UserList.createTitle')}\n </PermissionButton>\n }\n >\n <QueryList<UserListItem, undefined, { List: UserListItem[]; Total: number }>\n isGlobalNS\n code=\"100001\"\n url={url}\n rowKey=\"id\"\n columns={columns}\n transformResponse={response => {\n const { List, Total } = response\n return { list: List, total: Total }\n }}\n />\n {creatingContextHolder}\n {updatingContextHolder}\n </Card>\n )\n}\n\nexport default UserList\n","import { useToolkitsContext } from '@/components/ContextProvider'\nimport Highlight from '@/components/Highlight'\nimport PermissionButton from '@/components/PermissionButton'\nimport QueryList from '@/components/QueryList'\nimport type { RoleListItem, RoleV1, RoleV2 } from '@/features/permission'\nimport { PermissionList, useCreateRole, useRemoveRole, useUpdateRole } from '@/features/permission'\nimport { useFormModal } from '@/hooks/formModal'\nimport { usePermission } from '@/hooks/permission'\nimport { useQueryListStore } from '@/stores/queryList'\nimport { useTranslation } from '@/utils/i18n'\nimport { request } from '@/utils/request'\nimport { UsergroupAddOutlined } from '@ant-design/icons'\nimport type { TableColumnsType } from 'antd'\nimport { App, Card, Form, Input, Space } from 'antd'\nimport { produce } from 'immer'\nimport { Link } from 'react-router-dom'\n\nconst url = '/api/usystem/role/list'\n\nconst useCreatingUserModal = () => {\n const { message } = App.useApp()\n const { mutate } = useQueryListStore()\n const create = useCreateRole()\n const t = useTranslation()\n\n const onConfirm = async (values: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }) => {\n await create.trigger({\n name: `role_${values.name}`,\n permissions: values.permissions,\n })\n mutate(url, { page: 1 })\n message.success(t('RoleList.createSuccessfully'))\n }\n\n return useFormModal<{\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }>({\n title: t('RoleList.createTitle'),\n width: '50vw',\n content: form => (\n <Form form={form} layout=\"vertical\">\n <Form.Item label={t('name')} name=\"name\" rules={[{ required: true }]}>\n <Input addonBefore=\"role_\" />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </Form>\n ),\n onConfirm,\n })\n}\n\nconst useUpdatingRoleModal = () => {\n const { message } = App.useApp()\n const { mutate } = useQueryListStore()\n const update = useUpdateRole()\n const t = useTranslation()\n\n return useFormModal<{\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }>({\n title: t('RoleList.updateTitle'),\n width: '50vw',\n content: form => (\n <Form form={form}>\n <Form.Item label={t('name')} name=\"name\" rules={[{ required: true }]}>\n <Input readOnly addonBefore=\"role_\" />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </Form>\n ),\n onConfirm: async (values, _form, extraValues: { id: number }) => {\n await update.trigger({\n id: extraValues.id as number,\n name: `role_${values.name}`,\n permissions: values.permissions,\n })\n\n mutate(\n url,\n undefined,\n prev =>\n produce(prev, draft => {\n const match = draft?.list?.find(item => item.id === extraValues.id)\n\n if (match) {\n match.permissions = values.permissions\n }\n }),\n { revalidate: false },\n )\n message.success(t('RoleList.updateSuccessfully'))\n },\n })\n}\n\nconst RoleList = () => {\n const { accessible: viewable } = usePermission('200005', { isGlobalNS: true })\n const { modal, message } = App.useApp()\n const { usePermissionApiV2 } = useToolkitsContext()\n const remove = useRemoveRole()\n const { mutate } = useQueryListStore()\n const { show: showCreatingModal, contextHolder: creatingContextHolder } = useCreatingUserModal()\n const { show: showUpdatingModal, contextHolder: updatingContextHolder } = useUpdatingRoleModal()\n const t = useTranslation()\n\n const columns: TableColumnsType<RoleListItem> = [\n {\n title: t('name'),\n key: 'name',\n render(value: RoleListItem) {\n if (viewable) {\n return <Link to={`${value.name}`}>{value.name}</Link>\n } else {\n return <>{value.name}</>\n }\n },\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n },\n {\n title: t('creationTime'),\n dataIndex: 'ctime',\n key: 'ctime',\n },\n {\n title: t('operation'),\n width: 150,\n align: 'center',\n render: (value: RoleListItem) => {\n return (\n <Space size=\"small\">\n <PermissionButton\n isGlobalNS\n code=\"200003\"\n size=\"small\"\n type=\"link\"\n onClick={async () => {\n const { data: role } = await request<RoleV1 | RoleV2>(\n `/api/usystem/role/info${usePermissionApiV2 ? 'V2' : ''}?name=${value.name}`,\n { isGlobalNS: true },\n )\n showUpdatingModal({\n initialValues: {\n permissions: role?.permissions,\n name: role?.name.replace(/^role_/, ''),\n },\n extraValues: {\n id: role?.id,\n },\n })\n }}\n >\n {t('edit')}\n </PermissionButton>\n <PermissionButton\n isGlobalNS\n danger\n code=\"200004\"\n size=\"small\"\n type=\"link\"\n onClick={() => {\n modal.confirm({\n title: t('RoleList.deleteTitle'),\n content: (\n <Highlight texts={[value.name]}>{t('RoleList.deleteContent', { role: value.name })}</Highlight>\n ),\n async onOk() {\n await remove.trigger({\n id: value.id,\n name: value.name,\n })\n mutate(url, undefined, prev => {\n return produce(prev, draft => {\n const index = draft?.list?.findIndex(item => item.id === value.id)\n if (index) {\n draft?.list?.splice(index, 1)\n }\n })\n })\n message.success(t('RoleList.deleteSuccessfully'))\n },\n })\n }}\n >\n {t('delete')}\n </PermissionButton>\n </Space>\n )\n },\n },\n ]\n\n return (\n <Card\n title={t('role')}\n extra={\n <PermissionButton\n isGlobalNS\n type=\"primary\"\n code=\"200002\"\n icon={<UsergroupAddOutlined />}\n onClick={() => {\n showCreatingModal()\n }}\n >\n {t('RoleList.createTitle')}\n </PermissionButton>\n }\n >\n <QueryList<RoleListItem, undefined, { List: RoleListItem[]; Total: number }>\n isGlobalNS\n rowKey=\"name\"\n columns={columns}\n code=\"200001\"\n url={url}\n transformResponse={response => {\n const { List, Total } = response\n return { list: List, total: Total }\n }}\n />\n {creatingContextHolder}\n {updatingContextHolder}\n </Card>\n )\n}\n\nexport default RoleList\n","import { PermissionList, useRole } from '@/features/permission'\nimport { Breadcrumb, Card, Descriptions, Skeleton } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\nimport { useTranslation } from '@/utils/i18n'\n\nconst RoleDetail = () => {\n const params = useParams()\n const { data, isLoading } = useRole(params.name as string)\n const t = useTranslation()\n\n return (\n <>\n <Breadcrumb\n style={{ marginBottom: 24 }}\n items={[\n {\n key: '1',\n title: <Link to=\"/permission/role\">{t('role')}</Link>,\n },\n {\n key: '2',\n title: params.name,\n },\n ]}\n />\n <Card title={t('RoleDetail.title')}>\n <Skeleton loading={isLoading}>\n <Descriptions column={3} layout=\"vertical\">\n <Descriptions.Item label={t('name')}>{data?.name}</Descriptions.Item>\n <Descriptions.Item label=\"ID\">{data?.id}</Descriptions.Item>\n <Descriptions.Item label={t('creationTime')}>{data?.ctime}</Descriptions.Item>\n </Descriptions>\n <PermissionList readonly value={data?.permissions} />\n </Skeleton>\n </Card>\n </>\n )\n}\n\nexport default RoleDetail\n","import ContextProvider, { contextStore, useToolkitsContext } from '@/components/ContextProvider'\nimport type { DynamicTagsProps } from '@/components/DynamicTags'\nimport DynamicTags from '@/components/DynamicTags'\nimport type { FilterFormWrapperProps } from '@/components/FilterFormWrapper'\nimport FilterFormWrapper from '@/components/FilterFormWrapper'\nimport type { Game, GameState } from '@/components/GameSelect'\nimport GameSelect, { useGameStore } from '@/components/GameSelect'\nimport type { HighlightTextsProps } from '@/components/Highlight'\nimport Highlight from '@/components/Highlight'\nimport type { LayoutProps } from '@/components/Layout'\nimport Layout from '@/components/Layout'\nimport type { NavMenuItem } from '@/components/NavMenu'\nimport NavMenu from '@/components/NavMenu'\nimport type { PermissionButtonProps } from '@/components/PermissionButton'\nimport PermissionButton from '@/components/PermissionButton'\nimport type { PermissionGuardProps } from '@/components/PermissionGuard'\nimport PermissionGuard from '@/components/PermissionGuard'\nimport type { QueryListProps, QueryListRef } from '@/components/QueryList'\nimport QueryList, { QueryListAction } from '@/components/QueryList'\nimport RequireGame from '@/components/RequireGame'\nimport UserWidget from '@/components/UserWidget'\nimport type { UseFormModalProps } from '@/hooks/formModal'\nimport { useFormModal } from '@/hooks/formModal'\nimport { usePermission, usePermissions } from '@/hooks/permission'\nimport type { Locale } from '@/locales'\nimport baseRoutes from '@/routes/base'\nimport permissionRoutes from '@/routes/permission'\nimport { useQueryListStore } from '@/stores/queryList'\nimport type { TokenState } from '@/stores/token'\nimport { useTokenStore, useValidateToken } from '@/stores/token'\nimport '@/styles/index.css'\nimport { useTranslation } from '@/utils/i18n'\nimport { request, RequestError } from '@/utils/request'\nimport { mixedStorage } from '@/utils/storage'\n\nexport {\n useFormModal,\n PermissionButton,\n DynamicTags,\n QueryList,\n QueryListAction,\n FilterFormWrapper,\n Highlight,\n GameSelect,\n useGameStore,\n NavMenu,\n Layout,\n PermissionGuard,\n RequireGame,\n ContextProvider,\n contextStore,\n useToolkitsContext,\n UserWidget,\n usePermissions,\n usePermission,\n useQueryListStore,\n baseRoutes,\n permissionRoutes,\n useTranslation,\n mixedStorage,\n useTokenStore,\n useValidateToken,\n request,\n RequestError,\n type Locale,\n type DynamicTagsProps,\n type FilterFormWrapperProps,\n type UseFormModalProps,\n type Game,\n type GameState,\n type HighlightTextsProps,\n type LayoutProps,\n type NavMenuItem,\n type PermissionButtonProps,\n type PermissionGuardProps,\n type QueryListProps,\n type QueryListRef,\n type TokenState,\n}\n","import { PlusOutlined } from '@ant-design/icons'\nimport type { InputRef } from 'antd'\nimport { Input, Space, Tag, theme } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useRef, useState } from 'react'\n\nexport interface DynamicTagsProps {\n initialTags?: string[]\n addable?: boolean\n removable?: boolean\n // 返回 Promise。如果返回 Promise.resolve(true),则添加; 如果返回 Promise.resolve(false) 或 Promise.reject,则不添加\n addCallback?: (addedTag: string) => Promise<boolean>\n // 返回 Promise。如果返回 Promise.resolve(true),则删除; 如果返回 Promise.resolve(false) 或 Promise.reject,则不删除\n removeCallback?: (removedTag: string) => Promise<boolean>\n}\n\nconst DynamicTags: FC<DynamicTagsProps> = props => {\n const { initialTags, addable, removable, addCallback, removeCallback } = props\n const { token } = theme.useToken()\n const [tags, setTags] = useState<string[]>([])\n const [inputVisible, setInputVisible] = useState(false)\n const [inputValue, setInputValue] = useState('')\n const [editInputIndex, setEditInputIndex] = useState(-1)\n const [editInputValue, setEditInputValue] = useState<string>('')\n const inputRef = useRef<InputRef>(null)\n const editInputRef = useRef<InputRef>(null)\n\n useEffect(() => {\n setTags(initialTags ?? [])\n }, [initialTags])\n\n useEffect(() => {\n if (inputVisible) {\n inputRef.current?.focus()\n }\n }, [inputVisible])\n\n useEffect(() => {\n editInputRef.current?.focus()\n }, [inputValue])\n\n const handleClose = async (removedTag: string) => {\n const success = await removeCallback?.(removedTag)\n\n if (success) {\n const newTags = tags.filter(tag => tag !== removedTag)\n setTags(newTags)\n }\n }\n\n const showInput = () => {\n setInputVisible(true)\n }\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value)\n }\n\n const handleInputConfirm = async () => {\n if (inputValue && tags.indexOf(inputValue) === -1) {\n const success = await addCallback?.(inputValue)\n\n if (success) {\n setTags([...tags, inputValue])\n }\n }\n\n setInputVisible(false)\n setInputValue('')\n }\n\n const handleEditInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setEditInputValue(e.target.value)\n }\n\n const handleEditInputConfirm = () => {\n const newTags = [...tags]\n newTags[editInputIndex] = editInputValue\n setTags(newTags)\n setEditInputIndex(-1)\n setInputValue('')\n }\n\n const tagInputStyle: React.CSSProperties = {\n width: 78,\n verticalAlign: 'top',\n }\n\n const tagPlusStyle: React.CSSProperties = {\n background: token.colorBgContainer,\n borderStyle: 'dashed',\n }\n\n return (\n <Space wrap size={[0, 8]}>\n <Space wrap size={[0, 8]}>\n {tags.map((tag, index) => {\n if (editInputIndex === index) {\n return (\n <Input\n ref={editInputRef}\n key={tag}\n size=\"small\"\n style={tagInputStyle}\n value={editInputValue}\n onChange={handleEditInputChange}\n onBlur={handleEditInputConfirm}\n onPressEnter={handleEditInputConfirm}\n />\n )\n }\n\n return (\n <Tag\n key={tag}\n closable={removable}\n style={{ userSelect: 'none' }}\n onClose={async e => {\n e.preventDefault()\n await handleClose(tag)\n }}\n >\n <span\n onDoubleClick={e => {\n if (index !== 0) {\n setEditInputIndex(index)\n setEditInputValue(tag)\n e.preventDefault()\n }\n }}\n >\n {tag}\n </span>\n </Tag>\n )\n })}\n </Space>\n {addable &&\n (inputVisible ? (\n <Input\n ref={inputRef}\n type=\"text\"\n size=\"small\"\n style={tagInputStyle}\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputConfirm}\n onPressEnter={handleInputConfirm}\n />\n ) : (\n <Tag style={tagPlusStyle} onClick={showInput}>\n <PlusOutlined />\n 添加\n </Tag>\n ))}\n </Space>\n )\n}\n\nexport default DynamicTags\n","import * as Antd from 'antd'\nimport { Divider, Space } from 'antd'\nimport type { FC, Key, PropsWithChildren, ReactNode } from 'react'\nimport { Suspense } from 'react'\nimport { Link } from 'react-router-dom'\nimport logo from './logo.png'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport GameSelect from '@/components/GameSelect'\nimport NavMenu from '@/components/NavMenu'\nimport UserWidget from '@/components/UserWidget'\nimport RequireGame from '@/components/RequireGame'\n\nconst { Spin, theme } = Antd\nconst { Header, Sider, Content } = Antd.Layout\n\nexport interface LayoutProps extends PropsWithChildren {\n extras?: { key: Key; children: ReactNode }[]\n}\n\nconst Layout: FC<LayoutProps> = props => {\n const { children, extras } = props\n const {\n token: { colorBgContainer, colorBorder },\n } = theme.useToken()\n const { title, usePermissionApiV2, hideGameSelect, localeDropdownMenu } = useToolkitsContext()\n\n return (\n <Antd.Layout hasSider className=\"h-screen\">\n <Sider\n width={256}\n style={{\n overflow: 'auto',\n height: '100vh',\n position: 'fixed',\n left: 0,\n top: 0,\n bottom: 0,\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colorBorder,\n }}\n theme=\"light\"\n >\n <div className=\"flex items-end px-6 py-4\">\n <img src={logo} alt=\"logo\" className=\"w-8 h-8\" />\n <Link className=\"font-bold text-lg ml-2\" to=\"/\">\n {title}\n </Link>\n </div>\n <NavMenu />\n </Sider>\n <Antd.Layout className=\"ml-64\">\n <Header\n style={{\n padding: '0 24px',\n background: colorBgContainer,\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colorBorder,\n }}\n >\n <div className=\"flex justify-between items-center h-full\">\n <div>{usePermissionApiV2 && !hideGameSelect && <GameSelect />}</div>\n <Space size=\"small\" split={<Divider type=\"vertical\" />}>\n {extras?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n {localeDropdownMenu}\n <UserWidget />\n </Space>\n </div>\n </Header>\n <Content className=\"p-6 bg-gray-50\" style={{ overflow: 'overlay' }}>\n <Suspense\n fallback={\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '200px',\n }}\n />\n }\n >\n {usePermissionApiV2 && !hideGameSelect ? <RequireGame>{children}</RequireGame> : children}\n </Suspense>\n </Content>\n </Antd.Layout>\n </Antd.Layout>\n )\n}\n\nexport default Layout\n","import { Menu } from 'antd'\nimport type {\n ItemType,\n MenuDividerType,\n MenuItemGroupType,\n MenuItemType,\n SubMenuType,\n} from 'antd/es/menu/hooks/useItems'\nimport type { FC, ReactNode } from 'react'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\nimport { useNavStore } from '@/components/NavMenu/store'\nimport { useToolkitsContext } from '@/components/ContextProvider'\nimport { usePermissions } from '@/hooks/permission'\nimport type { Merge } from 'ts-essentials'\n\n// 扩展 antd Menu 的类型,使其支持一些我们想要的自定义字段。\ntype MenuItemType2 = Merge<\n MenuItemType,\n {\n code /** 权限编号 **/?: string\n route /** 前端路由地址 **/?: string\n }\n>\n\ntype SubMenuType2 = Merge<\n SubMenuType,\n {\n children?: NavMenuItem[]\n }\n>\n\ntype MenuItemGroupType2 = Merge<MenuItemGroupType, { children?: NavMenuItem[] }>\n\nexport type NavMenuItem = MenuItemType2 | SubMenuType2 | MenuItemGroupType2 | MenuDividerType | null\n\nconst withLink = (label?: ReactNode, route?: string): ReactNode => {\n if (!label) {\n return <></>\n }\n\n if (route) {\n return <Link to={route}>{label}</Link>\n }\n\n return label\n}\n\nfunction transformItems(items: NavMenuItem[], permissions?: Record<string, boolean>) {\n const result: ItemType[] = []\n\n for (let i = 0; i < items.length; i++) {\n if (items[i] === null) {\n result[i] = null\n } else if ((items[i] as MenuDividerType).type === 'divider') {\n result[i] = { ...items[i] } as MenuDividerType\n } else {\n if ((items[i] as SubMenuType2 | MenuItemGroupType2).children) {\n const { children, ...restProps } = items[i] as SubMenuType2 | MenuItemGroupType2\n result[i] = {\n ...restProps,\n children: transformItems(children ?? [], permissions),\n } as SubMenuType | MenuItemGroupType\n } else {\n const { route, label, code, ...restProps } = items[i] as MenuItemType2\n const isPass = !code || !permissions || permissions[code]\n\n result[i] = isPass\n ? ({\n ...restProps,\n label: withLink(label, route),\n } as MenuItemType)\n : null\n }\n }\n }\n\n return result\n}\n\n// 拍平导航配置,并且注入 keypath 字段\nfunction flatItems(\n items: NavMenuItem[],\n result: Merge<MenuItemType2, { keypath?: string[] }>[] = [],\n keypath: string[] = [],\n) {\n for (const item of items) {\n const children = (item as SubMenuType2 | MenuItemGroupType2)!.children as NavMenuItem[]\n\n if (Array.isArray(children)) {\n const _keys =\n (item as MenuItemGroupType2)!.type !== 'group' && item!.key ? [...keypath, item!.key as string] : keypath\n flatItems(children, result, _keys)\n } else {\n result.push(Object.assign(item as MenuItemType2, { keypath }))\n }\n }\n\n return result\n}\n\nconst NavMenu: FC = () => {\n const location = useLocation()\n const { menuItems } = useToolkitsContext()\n const flattenItems = useMemo(() => flatItems(menuItems ?? []), [menuItems])\n const codes = flattenItems.map(item => item.code).filter(Boolean) as string[]\n const { data: permissions } = usePermissions(codes, { isGlobalNS: true, suspense: true })\n const internalItems = useMemo(() => transformItems(menuItems ?? [], permissions), [menuItems, permissions])\n const { openKeys, selectedKeys, setOpenKeys, setSelectedKeys } = useNavStore()\n\n const onOpenChange = useCallback(\n (keys: string[]) => {\n const latestOpenKey = keys?.find(key => openKeys?.indexOf(key) === -1)\n const match = flattenItems.find(item => latestOpenKey === item.key)\n setOpenKeys((match?.keypath ?? [latestOpenKey]) as string[])\n },\n [flattenItems, openKeys, setOpenKeys],\n )\n\n useEffect(() => {\n const match = flattenItems.find(item => location.pathname === item.route)\n\n if (match) {\n const key = match.key as string\n const keypath = match.keypath as string[]\n setSelectedKeys([key])\n setOpenKeys(keypath)\n }\n }, [flattenItems, location, setOpenKeys, setSelectedKeys])\n\n return (\n <Menu\n style={{ borderRight: 'none' }}\n items={internalItems}\n mode=\"inline\"\n openKeys={openKeys}\n selectedKeys={selectedKeys}\n onOpenChange={onOpenChange}\n />\n )\n}\n\nNavMenu.displayName = 'NavMenu'\n\nexport default NavMenu\n","import { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nexport interface NavState {\n openKeys: string[]\n selectedKeys: string[]\n setOpenKeys: (keys: string[]) => void\n setSelectedKeys: (keys: string[]) => void\n}\n\nexport const useNavStore = create<NavState>()(\n persist(\n set => ({\n openKeys: [],\n setOpenKeys: keys => set({ openKeys: keys }),\n selectedKeys: [],\n setSelectedKeys: keys => set({ selectedKeys: keys }),\n }),\n {\n name: 'nav',\n storage: createJSONStorage(() => localStorage),\n partialize: state => ({\n openKeys: state.openKeys,\n selectedKeys: state.selectedKeys,\n }),\n },\n ),\n)\n","import type { FC } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport { Dropdown, Space } from 'antd'\nimport Link from 'antd/es/typography/Link'\nimport { LogoutOutlined, UserOutlined } from '@ant-design/icons'\nimport { useTranslation } from '@/utils/i18n'\nimport { useTokenStore } from '@/stores/token'\n\nconst UserWidget: FC = () => {\n const navigate = useNavigate()\n const { clearToken, getUser } = useTokenStore()\n const user = getUser()\n const t = useTranslation()\n\n return (\n <Dropdown\n menu={{\n selectable: true,\n items: [\n {\n key: '1',\n label: (\n <Link\n onClick={() => {\n clearToken()\n navigate('/login')\n }}\n >\n {t('UserWidget.logoutText')}\n </Link>\n ),\n icon: <LogoutOutlined />,\n },\n ],\n }}\n placement=\"bottomRight\"\n >\n <Link>\n <Space align=\"center\">\n <span>{user?.authorityId}</span>\n <UserOutlined style={{ fontSize: '16px' }} />\n </Space>\n </Link>\n </Dropdown>\n )\n}\n\nexport default UserWidget\n","import { Card, Empty } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { useTranslation } from '@/utils/i18n'\nimport { useGameStore } from '@/components/GameSelect'\nimport { useToolkitsContext } from '@/components/ContextProvider'\n\nconst RequireGame: FC<PropsWithChildren> = props => {\n const { children } = props\n const { usePermissionApiV2, hideGameSelect } = useToolkitsContext()\n const { game } = useGameStore()\n const t = useTranslation()\n\n if (usePermissionApiV2 && !hideGameSelect) {\n if (game) {\n // 切换游戏时,重新渲染 children\n return <div key={game.id}>{children}</div>\n } else {\n return (\n <Card>\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={t('RequireGame.description')} />\n </Card>\n )\n }\n }\n\n return children\n}\n\nexport default RequireGame\n","import { Result, Spin } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { useTranslation } from '@/utils/i18n'\nimport { usePermission } from '@/hooks/permission'\n\nexport interface PermissionGuardProps {\n code: string\n}\n\nconst PermissionGuard: FC<PropsWithChildren<PermissionGuardProps>> = props => {\n const { code, children } = props\n const { accessible, isValidating } = usePermission(code)\n const t = useTranslation()\n\n if (isValidating) {\n return (\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 200,\n }}\n />\n )\n }\n\n if (!accessible) {\n return <Result status=\"403\" subTitle={t('noEntitlement')} />\n }\n\n return <>{children}</>\n}\n\nexport default PermissionGuard\n","import { lazy } from 'react'\nimport type { RouteObject } from 'react-router-dom'\n\nconst Login = lazy(() => import('./Login'))\nconst NotFound = lazy(() => import('./NotFound'))\n\nconst routes: RouteObject = {\n children: [\n {\n path: 'login',\n element: <Login />,\n },\n {\n path: '*',\n element: <NotFound />,\n },\n ],\n}\n\nexport default routes\n","import { lazy } from 'react'\nimport type { RouteObject } from 'react-router-dom'\nimport { Navigate } from 'react-router-dom'\n\nconst UserList = lazy(() => import('./UserList'))\nconst RoleList = lazy(() => import('./RoleList'))\nconst RoleDetail = lazy(() => import('./RoleDetail'))\n\nconst routes: RouteObject[] = [\n {\n path: 'permission',\n children: [\n {\n index: true,\n element: <Navigate relative=\"path\" to=\"user\" />,\n },\n {\n path: 'user',\n element: <UserList />,\n },\n {\n path: 'role',\n element: <RoleList />,\n },\n {\n path: 'role/:name',\n element: <RoleDetail />,\n },\n ],\n },\n]\n\nexport default routes\n"]}
|