[1,["20g1ukYUVPvKWKBRznAKo+@f9941","54TknWPwVPqJqeCR+Y/Czo@f9941","95EkngnxZFbYuFpsqVTaFr@f9941","aa3gnuj51BPKnojGhupeFg@73b7f","acdPorH1tP9aPw8Sf0SD6R@f9941","b6mOVasAtJh6i0r4PN3Fn3","aa3gnuj51BPKnojGhupeFg@ef5e1","aa3gnuj51BPKnojGhupeFg@438fe","0dolaiIfZIG5C202Q6CReb@f9941","b7MFJ8MjNBwqr3fNq1j5dJ@f9941","f9KAbXF2hEP6/oErzehNDw","7b+d9AS8lOJYywmlAPlJEC","f1KiPEuSRDIqJgPZgkKPHo@f9941","a7YStUNeNCOKGpSntUY1g5","8aWN3s9DdAuY7AH8h96X+1","1brw/JvvpFnIvdrxpFCgMZ","fcU6Ex5rpNApE3zSJezPpa","5a8gG1WVFOLKgfrEqtkTLL@b47c0","45go8ltQ1MUqWR4ZSRpiuM@f9941","e3VTytLxVCk4Waj0PHgPKJ@73b7f","0dolaiIfZIG5C202Q6CReb@6c48a","20g1ukYUVPvKWKBRznAKo+@6c48a","45go8ltQ1MUqWR4ZSRpiuM@6c48a","54TknWPwVPqJqeCR+Y/Czo@6c48a","0asxQqaWhAc5WvAmvDsjYj@2df3a","c5CD51rS5OqYsz3udImVsA@6c48a","ccw6dVfT1DBKo7ykeS152f","cfxTxOeVZIK668P7Hc027v","5eTUjEDjRFr6JoiUhRl+i8","ffuIqPr2JI9I8dPLYGRDpD@f9941","afxHkx8GZGsJC+n+YfITQo@f9941","6fiRp7WghI5phB3bNkrIax@6c48a","955bAq4zhCPL27F0htsdnr@6c48a","95EkngnxZFbYuFpsqVTaFr@6c48a","07GNmWOb9KtLtjSWZm/vRn@6c48a","acdPorH1tP9aPw8Sf0SD6R@6c48a","afxHkx8GZGsJC+n+YfITQo@6c48a","aeGN7qxuBKPb9w7lUz+bqH@6c48a","a3zQCfCrBCDZJ4uf2rk5u8","b7MFJ8MjNBwqr3fNq1j5dJ@6c48a","700zdYHB5CTbCr6sdBBVm/","0asxQqaWhAc5WvAmvDsjYj@2b0a8","a1Vfk7d2lMpLdfsT5SGThZ","0asxQqaWhAc5WvAmvDsjYj@4a7d8","0asxQqaWhAc5WvAmvDsjYj@0e750","0asxQqaWhAc5WvAmvDsjYj@ef86b","0asxQqaWhAc5WvAmvDsjYj@426f2","0asxQqaWhAc5WvAmvDsjYj@754a2","0asxQqaWhAc5WvAmvDsjYj@71919","0asxQqaWhAc5WvAmvDsjYj@1332c","0asxQqaWhAc5WvAmvDsjYj@4d16f","0asxQqaWhAc5WvAmvDsjYj@efe84","e3VTytLxVCk4Waj0PHgPKJ@18751","e3VTytLxVCk4Waj0PHgPKJ@30732","e3VTytLxVCk4Waj0PHgPKJ@da6f3","e3VTytLxVCk4Waj0PHgPKJ@f1394","e3VTytLxVCk4Waj0PHgPKJ@4b929","e3VTytLxVCk4Waj0PHgPKJ@75ee4","8eBHF49hxDIqL20a2yi2ri","e3VTytLxVCk4Waj0PHgPKJ@39f7b","e3VTytLxVCk4Waj0PHgPKJ@a72ab","f1KiPEuSRDIqJgPZgkKPHo@6c48a","ffuIqPr2JI9I8dPLYGRDpD@6c48a"],["node","_spriteFrame","_parent","_normalSprite","_target","_hoverSprite","_pressedSprite","_disabledSprite","_mesh","target","_skeleton","_defaultClip","_textureSource","root","_customMaterial","mainTexture","_effectAsset","WithdrawalData","tanchuan","_placeholderLabel","_textLabel","_backgroundImage","data","Name","asset","rechargenum","Eth","privateddress","RechageNum","USDT","ETH","Toaddress","WithdrawalNum","RachageModel","withdrawalModal","substitute","address","time","price","type","num","bctype","RechargeNum","_checkMark","_cameraComponent","Tanchuan","Diamonds","coin","rechargeNum","UserLabel","Userdata","userLabel","model","rachagemodel","WithdrawalModal","userdata","main","scene","UsdtPrice","EthPrice","_scrollView","itemPrefab","_envmapHDR","_envmapLDR"],[["cc.Node",["_name","_layer","_objFlags","_id","_active","__editorExtras__","_parent","_lpos","_prefab","_children","_components","_euler","_lrot","_lscale"],-3,1,5,4,2,9,5,5,5],["cc.Label",["_string","_actualFontSize","_fontSize","_overflow","_horizontalAlign","_enableWrapText","_lineHeight","_verticalAlign","_cacheMode","_color","node","_customMaterial","__prefab"],-6,5,1,6,4],"cc.SpriteFrame",["a949arMe05AOaRUaqeKP9PR",["node","tanchuan","rechargenum","WithdrawalData","rachagemodel","WithdrawalModal","userdata","main","substitute"],3,1,1,1,1,1,1,1,1,1],["cc.Sprite",["_sizeMode","_type","_name","node","_spriteFrame","_color"],0,1,6,5],"cc.ImageAsset",["cc.Node",["_name","_layer","_active","_parent","_components","_lpos","_prefab","_children","_lrot","_euler"],0,1,12,5,4,9,5,5],["cc.UITransform",["_name","node","_contentSize","_anchorPoint","__prefab"],2,1,5,5,4],["cc.Node",["_name","_layer","_active","_children","_components","_parent","_lpos"],0,2,12,1,5],["f1ef2cIlPRMf7DqznSUmC33",["node","rechargenum","Tanchuan","model"],3,1,1,1,1],["a068aX7dtJAv74XQag5FB9n",["node","WithdrawalData","withdrawalModal","WithdrawalNum","Toaddress","Name","ETH","USDT","tanchuan"],3,1,1,1,1,1,1,1,1,1],["27335xaDl9Jw5lK1s+Pnap/",["node","items","itemPrefab","__prefab"],3,1,9,6,4],["cc.Node",["_name","_parent","_lpos","_components","_children","_prefab","_lrot","_euler"],2,1,5,2,12,4,5,5],["cc.PrefabInfo",["fileId","targetOverrides","root","asset","nestedPrefabInstanceRoots"],1,1,1,2],["cc.SkeletalAnimation",["playOnLoad","_name","node","__prefab","_clips","_defaultClip"],1,1,4,3,6],["cc.SkinnedMeshRenderer",["_shadowCastingMode","node","__prefab","_materials","lightmapSettings","_skinningRoot","_mesh","_skeleton"],2,1,4,3,4,1,6,6],["cc.Widget",["_alignFlags","_left","_right","_originalHeight","_alignMode","node"],-2,1],["69a53EuWypB1pE+/o5xP7Cb",["node","address","coin","Diamonds"],3,1,1,1,1],["cc.Button",["_transition","node","_normalColor","_target","_normalSprite","_hoverSprite","_pressedSprite","_disabledSprite","clickEvents"],2,1,5,1,6,6,6,6,9],["46eadJwItZJGYB5TfwbBK+G",["node","RechageNum","privateddress","Eth"],3,1,1,1,1],["490a9P8JcRBPZFNabzsmAAR",["node","WithdrawalNum","Toaddress","Name","ETH","USDT"],3,1,1,1,1,1,1],["ea5b9FPPQ1LU6xgN2b46WGP",["node","bctype","num","type","price","time","__prefab"],3,1,1,1,1,1,1,4],["cc.EditBox",["_inputMode","_maxLength","node","_textLabel","_placeholderLabel","_backgroundImage"],1,1,1,1,6],["cc.Toggle",["_isChecked","node","_normalColor","_target"],2,1,5,1],["cc.PrefabInstance",["fileId","prefabRootNode","propertyOverrides","removedComponents"],1,9,9],["cc.Camera",["_clearFlags","_visibility","_projection","_priority","_orthoHeight","_far","node","_color"],-3,1,5],["cc.MeshRenderer",["_shadowCastingMode","node","__prefab","_materials","lightmapSettings","_mesh"],2,1,4,3,4,6],"cc.TextureCube",["cc.Mesh",["_native","_hash","_struct"],1,11],["cc.Prefab",["_name"],2],["cc.PrefabInfo",["fileId","root","instance","asset"],2,1,4,6],["cc.CompPrefabInfo",["fileId"],2],["cc.ModelLightmapSettings",[],3],["cc.Material",["_name","_states","_defines","_props"],0,12],["cc.SceneAsset",["_name"],2],["cc.Canvas",["node","_cameraComponent"],3,1,1],["cc.PageView",["_name","horizontal","node"],1,1],["cc.Mask",["node"],3,1],["cc.ClickEvent",["_componentId","handler","target"],1,1],["d894bqQF01JYqH5sL9htC9/",["node","RechageNum","rechargeNum","privateddress","Eth","tanchuan"],3,1,1,1,1,1,1],["1d631zpvopGu6QN11mMr05g",["node","tanchuan"],3,1,1],["2a9a84aVMpE2ZvMkbJqc0mU",["node","Userdata","UserLabel"],3,1,1,1],["ccdd92lOQ1D9Yc5O5tzgafw",["node","address","userLabel"],3,1,1,1],["e0f80zveGpGMKehbGHBUZ0y",["node","RechargeNum","RachageModel"],3,1,1,1],["cc.Scene",["_name","_children","_prefab","_globals"],2,2,4,4],["cc.SceneGlobals",["ambient","shadows","_skybox","fog","octree"],3,4,4,4,4,4],["cc.AmbientInfo",["_skyIllumLDR","_skyColorHDR","_skyColorLDR"],2,5,5],["cc.ShadowsInfo",["_enabled","_type","_distance","_shadowColor","_size"],0,5,5],["cc.SkyboxInfo",["_enabled","_envmapHDR","_envmapLDR"],2,6,6],["cc.FogInfo",["_fogColor"],3,5],["cc.OctreeInfo",[],3],["d190enVzU5PqLcQzMU+1DD2",["node"],3,1],["91737xikSpClJbxrtNJlG7v",["node"],3,1],["6e410fe6ClCe4NyFsXqRtlO",["node"],3,1],["Item",["bctype","num","type","price","time"],-2],["cc.TargetInfo",["localID"],2],["cc.ToggleContainer",["node"],3,1],["53397ECPZ5Kw6ELeIb9pG5d",["node"],3,1],["CCPropertyOverrideInfo",["propertyPath","targetInfo","value"],2,4,4],["CCPropertyOverrideInfo",["propertyPath","targetInfo","value"],2,4,8],["CCPropertyOverrideInfo",["value","propertyPath","targetInfo"],1,4],["CCPropertyOverrideInfo",["value","propertyPath","targetInfo"],1,1],["CCPropertyOverrideInfo",["propertyPath","targetInfo","value"],2,1,8],["cc.DirectionalLight",["_illuminanceHDR","_illuminanceLDR","_shadowEnabled","_shadowPcf","_shadowBias","_shadowSaturation","_shadowDistance","_csmLevel","_shadowFar","_shadowOrthoSize","node","_staticSettings"],-7,1,4],["cc.StaticLightSettings",[],3],["98770NY77pN7YzCEbi3wy42",["node"],3,1],["cc.ScrollBar",["_direction","node","_handle"],2,1,1],["cc.ScrollView",["bounceDuration","brake","horizontal","node","_content","_verticalScrollBar"],0,1,1,1],["cc.EffectAsset",["_name","shaders","techniques"],0],["cc.Skeleton",["_name","_hash","_joints","_bindposes"],0,12]],[[13,0,2,3,2],[7,1,2,1],[31,0,2],[32,1],[55,0,2],[0,0,1,6,10,7,3],[6,0,3,7,6,5,8,9,2],[1,0,1,2,10,9,4],[0,0,1,6,9,10,7,3],[0,0,6,8,7,12,11,2],[18,0,1,8,2,3,4,5,6,7,2],[38,0,1,2,3],[58,0,1,2,2],[0,0,6,9,8,7,12,13,11,2],[7,1,2,3,1],[1,0,1,2,3,5,10,9,6],[6,0,1,3,4,5,3],[0,0,6,10,8,12,13,11,2],[28,0,1,2,3],[15,1,2,3,4,5,6,7,1],[0,0,6,9,8,2],[4,1,0,3,5,4,3],[4,1,0,3,4,3],[60,0,1,2,3],[0,0,2,1,6,10,4],[0,0,6,9,8,7,12,11,2],[0,0,6,9,10,8,7,12,13,11,2],[14,1,0,2,3,4,5,3],[37,0,1],[1,0,4,7,1,2,6,10,9,7],[0,0,6,10,8,7,12,13,11,2],[7,0,1,2,2],[0,0,1,6,10,3],[8,0,2,1,5,3,4,6,4],[4,2,1,0,3,5,4,4],[4,0,3,5,4,2],[36,0,1,2,3],[1,0,1,2,3,5,10,9,11,6],[26,0,1,2,3,4,5,2],[0,0,1,9,10,7,3],[1,0,4,1,2,3,5,10,9,7],[33,0,1,2,3,4],[0,0,1,6,9,10,3],[6,0,2,1,3,4,5,4],[6,0,1,3,4,6,5,3],[7,1,4,2,3,1],[1,0,4,7,1,2,6,10,12,9,7],[54,0,1,2,3,4,6],[69,0,1,2,3,4],[29,0,2],[0,2,5,6,8,3],[8,0,1,5,3,4,6,3],[30,0,1,2,3,2],[62,0,1,2,2],[8,0,1,3,4,6,3],[14,0,2,3,4,5,2],[9,0,1],[18,0,1,2,3,4,5,6,7,2],[3,0,8,1],[22,0,1,2,3],[24,0,1,2,3],[0,0,9,8,2],[0,0,3,6,10,7,12,11,3],[0,0,6,8,7,2],[4,0,3,4,2],[3,0,1,1],[3,0,2,1],[3,0,3,1],[3,0,1],[10,0,2,1,1],[42,0,1,2,1],[43,0,1,2,1],[22,0,1,2,3,4,5,3],[1,0,1,2,9,4],[1,0,4,1,2,3,5,10,7],[59,0,1,2,2],[26,1,2,3,4,5,1],[0,0,6,9,10,8,7,13,2],[0,0,1,3,9,10,7,4],[0,0,2,1,6,9,10,7,4],[0,0,4,1,6,9,10,7,4],[0,0,2,1,6,10,7,4],[0,0,6,10,8,7,13,11,2],[0,0,9,10,8,7,2],[0,0,9,8,7,12,11,2],[0,0,9,8,7,2],[0,0,6,9,8,12,11,2],[0,0,6,8,7,12,13,11,2],[0,0,6,9,8,7,2],[0,0,1,9,10,8,7,3],[6,0,2,1,3,4,4],[6,0,1,3,4,3],[8,0,2,1,5,3,4,4],[12,0,1,3,2,2],[12,0,1,4,5,2,6,7,2],[13,1,4,2],[15,0,1,2,3,4,5,6,7,2],[34,0,2],[7,1,4,2,1],[35,0,1,1],[16,0,1,2,5,4],[16,0,3,4,5,4],[9,0,1,2,1],[9,0,3,1],[4,2,0,3,3],[4,0,3,2],[4,1,0,3,3],[17,0,1,2,3,1],[17,0,1],[19,0,1,2,3,1],[19,0,1],[39,0,1,2,3,4,5,1],[3,0,4,1],[3,0,5,1],[3,0,6,1],[3,0,7,1],[40,0,1,1],[20,0,1,2,3,4,5,1],[20,0,1],[10,0,1,3,4,5,6,7,8,1],[10,0,2,1],[41,0,1,2,1],[21,0,1,2,3,4,5,1],[21,0,6,1,2,3,4,5,1],[11,0,1],[11,0,1,2,1],[11,0,3,1],[44,0,1,2,3,2],[45,0,1,2,3,4,1],[46,0,1,2,2],[47,0,1,2,3,4,4],[48,0,1,2,2],[49,0,1],[50,1],[51,0,1],[52,0,1],[1,0,4,1,2,6,3,9,7],[1,0,1,2,3,8,9,6],[1,0,1,2,3,10,9,5],[1,0,4,7,1,2,3,5,10,9,8],[53,0,1],[23,1,2,3,1],[23,0,1,2,3,2],[56,0,1],[57,0,1],[24,0,2,3,2],[61,0,1,2,3],[63,0,1,2,3,4,5,6,7,8,9,10,11,11],[64,1],[25,0,1,6,3],[25,2,3,4,5,0,1,6,7,7],[65,0,1],[66,0,1,2,2],[67,0,1,2,3,4,5,4],[68,0,1,2,4]],[[[[18,".bin",3495632489,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":22336,"length":3516,"count":1758,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":22336,"count":349,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-1.0263243913650513,-0.3362765312194824,-0.03969179466366768],"maxPosition",8,[1,1.0416858196258545,0.37944579124450684,2.4551167488098145]]],-1],0,0,[],[],[]],[[[18,".bin",3036632834,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":22272,"length":3516,"count":1758,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":22272,"count":348,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-1.0627228021621704,-0.22964781522750854,-0.03969179466366768],"maxPosition",8,[1,1.0608391761779785,0.271166056394577,2.4551167488098145]]],-1],0,0,[],[],[]],[[[18,".bin",254309135,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":4752,"length":1008,"count":504,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":4752,"count":99,"stride":48},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-2.0139009952545166,-2.0199241638183594,-0.5083037614822388],"maxPosition",8,[1,2.0139009952545166,2.0199241638183594,0.41632819175720215]]],-1],0,0,[],[],[]],[[[18,".bin",29018075,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":17024,"length":2616,"count":1308,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":17024,"count":266,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.8331011533737183,-0.3728335201740265,-0.03329771012067795],"maxPosition",8,[1,0.7926641702651978,0.46718841791152954,2.0596137046813965]]],-1],0,0,[],[],[]],[[[18,".bin",1251657800,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":44032,"length":5268,"count":2634,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":44032,"count":688,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-26.697162628173828,-5.055922985076904,-21.154483795166016],"maxPosition",8,[1,60.5887565612793,11.239510536193848,12.134369850158691]]],-1],0,0,[],[],[]],[[[18,".bin",2591114660,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":17024,"length":2616,"count":1308,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":17024,"count":266,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.7926226854324341,-0.7388861179351807,-0.05313277989625931],"maxPosition",8,[1,0.3647039830684662,0.5992574691772461,2.038058042526245]]],-1],0,0,[],[],[]],[[[18,".bin",3382949082,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":22144,"length":3516,"count":1758,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":22144,"count":346,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.9536016583442688,-0.38312095403671265,-0.05688628926873207],"maxPosition",8,[1,0.487619012594223,0.4689179062843323,1.8973422050476074]]],-1],0,0,[],[],[]],[[[18,".bin",4260990112,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":22144,"length":3516,"count":1758,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":22144,"count":346,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-1.091290831565857,-0.41489967703819275,-0.07584762573242188],"maxPosition",8,[1,0.9092828035354614,0.5096479654312134,2.450913906097412]]],-1],0,0,[],[],[]],[[[18,".bin",3840728426,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":17216,"length":2622,"count":1311,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":17216,"count":269,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.7611004710197449,-0.18266357481479645,-0.06545485556125641],"maxPosition",8,[1,0.961718738079071,0.5065948367118835,2.02461838722229]]],-1],0,0,[],[],[]],[[[18,".bin",1400315511,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":17216,"length":2622,"count":1311,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":17216,"count":269,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.49995025992393494,-0.4541564881801605,-0.09076808393001556],"maxPosition",8,[1,0.9192519783973694,0.6330084204673767,2.026685953140259]]],-1],0,0,[],[],[]],[[{"name":"default_scrollbar","rect":{"x":0,"y":0,"width":30,"height":15},"offset":{"x":0,"y":0},"originalSize":{"width":30,"height":15},"rotated":false,"capInsets":[0,0,0,0],"vertices":{"rawPosition":[-15,-7.5,0,15,-7.5,0,-15,7.5,0,15,7.5,0],"indexes":[0,1,2,2,1,3],"uv":[0,15,30,15,0,0,30,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-15,"y":-7.5,"z":0},"maxPos":{"x":15,"y":7.5,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[20]],[[{"name":"default_btn_normal","rect":{"x":0,"y":0,"width":40,"height":40},"offset":{"x":0,"y":0},"originalSize":{"width":40,"height":40},"rotated":false,"capInsets":[12,12,12,12],"vertices":{"rawPosition":[-20,-20,0,20,-20,0,-20,20,0,20,20,0],"indexes":[0,1,2,2,1,3],"uv":[0,40,40,40,0,0,40,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-20,"y":-20,"z":0},"maxPos":{"x":20,"y":20,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[21]],[[{"name":"default_radio_button_on","rect":{"x":1,"y":1,"width":30,"height":30},"offset":{"x":0,"y":0},"originalSize":{"width":32,"height":32},"rotated":false,"capInsets":[0,0,0,0],"vertices":{"rawPosition":[-15,-15,0,15,-15,0,-15,15,0,15,15,0],"indexes":[0,1,2,2,1,3],"uv":[1,31,31,31,1,1,31,1],"nuv":[0.03125,0.03125,0.96875,0.03125,0.03125,0.96875,0.96875,0.96875],"minPos":{"x":-15,"y":-15,"z":0},"maxPos":{"x":15,"y":15,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[22]],[[{"name":"default_btn_pressed","rect":{"x":0,"y":0,"width":40,"height":40},"offset":{"x":0,"y":0},"originalSize":{"width":40,"height":40},"rotated":false,"capInsets":[12,12,12,12],"vertices":{"rawPosition":[-20,-20,0,20,-20,0,-20,20,0,20,20,0],"indexes":[0,1,2,2,1,3],"uv":[0,40,40,40,0,0,40,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-20,"y":-20,"z":0},"maxPos":{"x":20,"y":20,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[23]],[[{"base":"2,2,0,0,2,1","rgbe":false,"mipmaps":[{"front":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@e9a6d","back":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@40c10","left":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@8fd34","right":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@74afd","top":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@bb97f","bottom":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@7d38f"}]}],[27],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[[49,"grassGoup"],[61,"grassGoup",[-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13],[0,"e5Peksu5tL9peMeABb8/JC",-1,0]],[77,"grass",1,[-15],[[55,true,-14,[2,"11JgtTUn5OJKE3LJ8pTj/2"],[3],4]],[0,"87M1Av0v5LhZ3LsJOTzwr3",1,0],[1,-0.852,0.892,-1.49],[1,1.8,1.8,1.8]],[20,"RootNode",2,[-16,-17,-18],[0,"54SHCY049LyqH1HRGY3ZVR",1,0]],[26,"grass",1,[-20],[[55,true,-19,[2,"abXR2STONCQrmlGd7QjDWb"],[8],9]],[0,"8avX4W7ZtLOLCZ8n5QtiPm",1,0],[1,1.271,0.836,-2.68],[3,0,-0.09886819763876702,0,0.9951005373808527],[1,1.4,1.4,1.4],[1,0,-11.348,0]],[20,"RootNode",4,[-21,-22,-23],[0,"bdiB2XMldLgpbPP0u9vyiH",1,0]],[26,"grass",1,[-25],[[27,"grass",true,-24,[2,"3eRlu7+XFMf4IKjhzVuyYo"],[13],14]],[0,"5fAmHUz0xO9YFym/gsZawP",1,0],[1,0.816,0.874,-2.029],[3,0.009594606467145706,-0.09840154486124139,-0.09656895017241425,0.9904037143297977],[1,1.8,1.8,1.8],[1,0,-11.348,-11.138]],[20,"RootNode",6,[-26,-27,-28],[0,"0cYonIu91LHamoapMUydbc",1,0]],[26,"grass",1,[-30],[[27,"grass",true,-29,[2,"22rvun9aNNBbAK//dWXzkX"],[18],19]],[0,"9bIVhdYYpFl7JZmL4oubNS",1,0],[1,1.505,0.835,-2.352],[3,0.009051343059323664,0.011005731118140823,-0.042668681053864996,0.9989876529409666],[1,1.8,1.8,1.8],[1,1.094,1.309,-4.879]],[20,"RootNode",8,[-31,-32,-33],[0,"2at9CGY1VK9qtNpM8kC/KU",1,0]],[26,"grass",1,[-35],[[27,"grass",true,-34,[2,"0f8P8jwTVOzaIGGhmhMYJ6"],[23],24]],[0,"2d66RAsipF1brG2RGpHJY1",1,0],[1,2.591,0.697,-3.192],[3,-0.009569056200142995,-0.27238145223532967,-0.02174826425431747,0.961895935454317],[1,1.4,1.4,1.4],[1,-1.735,-31.653,-2.099]],[20,"RootNode",10,[-36,-37,-38],[0,"75DE0pyqBGsIOI2RSOFxap",1,0]],[26,"grass",1,[-40],[[27,"grass",true,-39,[2,"b6LjWqcFFEYa267NpDVpBB"],[28],29]],[0,"ffwse8PqZBf4sIEkNdsA+i",1,0],[1,-2.85,0.766,-2.616],[3,-0.007707220961668685,-0.0985673335815995,0.07757256533280044,0.9920723646001587],[1,1.8,1.8,1.8],[1,0,-11.348,8.942]],[20,"RootNode",12,[-41,-42,-43],[0,"12tzV7tYdKJJxbVmqiEpry",1,0]],[26,"grass",1,[-45],[[27,"grass",true,-44,[2,"a5eATDuwJGuL6l09vX0n3S"],[33],34]],[0,"adNP+ELEhC4awfcKkY8jYJ",1,0],[1,-3.252,0.663,-3.355],[3,-0.005303598000440666,-0.09872584440048117,0.053380291603709065,0.9936677633716235],[1,1.6,1.6,1.6],[1,9.996766443584073e-17,-11.348,6.150000000000002]],[20,"RootNode",14,[-46,-47,-48],[0,"0eVA3+ezRBf4EQOOoMIo4S",1,0]],[26,"grass",1,[-50],[[27,"grass",true,-49,[2,"8fKHzMP19M76liKGOWy5fp"],[38],39]],[0,"33gYFxG8dO2r8iKjzjEx4z",1,0],[1,-4.716,0.534,-2.539],[3,-0.011417842217574529,0.10201162854238845,0.09441482697624534,0.9902267926936081],[1,1.2999999999999998,1.3,1.3],[1,-2.442,11.991,10.641]],[20,"RootNode",16,[-51,-52,-53],[0,"53OGGCuwFNs4KQ0nQRdow5",1,0]],[26,"grass",1,[-55],[[27,"grass",true,-54,[2,"63dAWSpBBOqo5RjIXi5sEW"],[43],44]],[0,"27mCip0lFNkL+6Dj/Bpwj4",1,0],[1,-3.151,0.706,-2.905],[3,-0.01606605470413201,0.10576273729137807,0.0511818299419083,0.9929433748057723],[1,1.6,1.6,1.6],[1,-2.461,12.281,5.638]],[20,"RootNode",18,[-56,-57,-58],[0,"560/1xR41BPKG+lcc5935I",1,0]],[26,"grass",1,[-60],[[27,"grass",true,-59,[2,"5c8UINxBNN1bAOwYYO6ZIW"],[48],49]],[0,"50aim7sdtB2rmsHB4KRkd5",1,0],[1,2.179,0.714,-3.159],[3,0.0002046174412504865,-0.2725489284000769,-0.05622568582446521,0.9604976376926917],[1,1.4,1.4,1.4],[1,-1.744,-31.778,-6.207]],[20,"RootNode",20,[-61,-62,-63],[0,"25mf8t9bhJIo3E0lcGCo1H",1,0]],[26,"grass",1,[-65],[[27,"grass",true,-64,[2,"2dbXeRDsVAWK67o3tGgUEl"],[53],54]],[0,"70DWXrCRRL4pWATtzgi7DN",1,0],[1,5.041,0.406,-3.58],[3,0.026333680128465056,-0.27127042474669716,-0.14805365417229147,0.9506834433368816],[1,1.4,1.4,1.4],[1,-1.815,-32.126,-17.205]],[20,"RootNode",22,[-66,-67,-68],[0,"9dXaYb8ytBBb2yYH4yN6Vh",1,0]],[26,"grass",1,[-70],[[27,"grass",true,-69,[2,"42733HPMdIEqobiaBVXbRJ"],[58],59]],[0,"7aOtJ3fThN27Zj4fmkg0ut",1,0],[1,4.153,0.548,-3.566],[3,0.01263456693718553,-0.27225485806840527,-0.09997674733537244,0.9569338064718487],[1,1.4,1.4,1.4],[1,-1.769,-31.94,-11.433]],[20,"RootNode",24,[-71,-72,-73],[0,"fa4L3FVuFMwYhNq67HoU7c",1,0]],[17,"grass",3,[[19,-74,[2,"a6J1jU/r1BPKNIcVMEREit"],[0],[3],2,1,2]],[0,"5fs1r6h0xEiJFeWVPk8SNl",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",3,[-75],[0,"daWdShf/9NHLgm8BB+DJZm",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",27,[[9,"Bone003",-76,[0,"8e/dPEvbdIMo48q55vpZZ3",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"beKna0bXZNtrHWMkpFZoVU",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",3,[-77],[0,"94aP4+w7dE/qUrh7Cfcv3Y",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",29,[[9,"Bone006",-78,[0,"96ATlvvpZKqpZWVYxnyW6U",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"8fu8biB4BPFKtDBKsYv4K/",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",5,[[19,-79,[2,"28WH2cvhNDFbN3it+8Q+XK"],[5],[3],4,6,7]],[0,"74Q+wg/aVBj5Bkvd+Cqz4L",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",5,[-80],[0,"4fGc2baulLjbJeePpPYcqt",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",32,[[9,"Bone003",-81,[0,"af9wSIs/ZHx5FXOjfa1Jum",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"25LOOT8GBDpr0h1KIC5gCx",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",5,[-82],[0,"b8DSzxi5tJyKiMnjvG0NLg",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",34,[[9,"Bone006",-83,[0,"65QAhjUVBAtLwEci9t05Ey",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"e75gT5ogJMOoh/2sggS7OQ",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",7,[[19,-84,[2,"87exLhmM1P35jx6GLN7j5f"],[10],[3],6,11,12]],[0,"60njdFxDhJWowG9HZr9kRy",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",7,[-85],[0,"dfSzBMugdCkL5lyChYPcpt",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",37,[[9,"Bone003",-86,[0,"91jR835RZHKbRhzSn1x2pJ",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"3bw6IJ5hBJ0aqjcninjsA3",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",7,[-87],[0,"36km6+kJtJZ4iiy8pwU3RO",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",39,[[9,"Bone006",-88,[0,"977HJ5Wy5HiapZRnYB3I8X",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"3da6ppQblGu7DGQDIjczFt",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",9,[[19,-89,[2,"dduLonFhNK+q908BUlLM7f"],[15],[3],8,16,17]],[0,"f2zxp5nX1CJq18JC2EndYO",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",9,[-90],[0,"3c+BtM6atJC4XerbYlNlM0",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",42,[[9,"Bone003",-91,[0,"baL59AVvRKlKmpQqSjNAYI",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"89NJAVd1tBZ6C0iX/YbeY2",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",9,[-92],[0,"9byDe6eNtGPIztX4VSZKlQ",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",44,[[9,"Bone006",-93,[0,"6fAgsRfRRHeoZrCvNeGhDK",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"8exO45eF5F2KzRxFbNE1M/",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",11,[[19,-94,[2,"af0f1GeGlKf5MvKMEuH8MJ"],[20],[3],10,21,22]],[0,"a2WxB7prNBKZLuuRtE7RC2",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",11,[-95],[0,"d9cSWZZzxJ0JJz3NZ3KYKr",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",47,[[9,"Bone003",-96,[0,"65JgfqDUlBhq62ZblXl99a",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"613BOOO+hIlqnTjr1LZ7yD",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",11,[-97],[0,"daMGy+QoZIMbYWUh1/PBDR",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",49,[[9,"Bone006",-98,[0,"4bzVNkn1hF04sTb5BrBwWZ",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"aea82LsKdAiqVuBFPi2Vfz",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",13,[[19,-99,[2,"e9BPt5G81CloUmA5IJNHIQ"],[25],[3],12,26,27]],[0,"32O+zfC79Ly5/JDvR+zPy3",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",13,[-100],[0,"2csxgVNAlDEIWU7lnXQfKS",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",52,[[9,"Bone003",-101,[0,"f31n3srf1OQ6ztTn+Z0+bi",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"39pnXuaeZGe5VqFTUXoXAo",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",13,[-102],[0,"e1Z+TO4odC37Bc8FKLNniF",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",54,[[9,"Bone006",-103,[0,"c8HIUzEBxJx72ffmHr7Yzh",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"82tqRzYDNKi6iXruWWHldm",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",15,[[19,-104,[2,"7dt8ZZ5EBNDIxOgpt1XbGu"],[30],[3],14,31,32]],[0,"3c/GljN9JNKpGUQDJiCaAz",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",15,[-105],[0,"17tlC2EGZMWoKAixVNAp0A",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",57,[[9,"Bone003",-106,[0,"9fnTS8hnVIWqrzTdhgEpre",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"77DlSvZMVCFLNlyGWiwIha",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",15,[-107],[0,"d1EnMgh6RE7o+kI5cUNlG0",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",59,[[9,"Bone006",-108,[0,"8cUixi2TpMHINjSklAPeYi",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"b7XmnH2bBCVpvgTAKnVXA2",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",17,[[19,-109,[2,"c4Nekl9YtKUKupS0ASX7It"],[35],[3],16,36,37]],[0,"43yCcO1I5D6qP+LJIIGKjX",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",17,[-110],[0,"0aJTcuk/5M56nEkb+D7tN9",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",62,[[9,"Bone003",-111,[0,"d5T2sohQVAEa4ljoSzlMKU",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"93hV+qqgFP44pIvuByy6RE",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",17,[-112],[0,"6etpava3ZGlovr3HG7SpRo",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",64,[[9,"Bone006",-113,[0,"6c2sTe+khLGYrsZVSADL4H",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"ecsSU+lvpNf7DhOOeFG7w2",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",19,[[19,-114,[2,"b9cuhcVRxPvZTPHcAyE7eS"],[40],[3],18,41,42]],[0,"87cW2HzEtNk4+RMW95NbLB",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",19,[-115],[0,"16ssZzbLdO76GQg4Dvdp/y",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",67,[[9,"Bone003",-116,[0,"5bcVkwfGRPza49BU4T6rqn",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"fcqb+cLDVJ3KNvBTyJYBwm",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",19,[-117],[0,"0eRKfLOh9OdLsOOjTosv1c",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",69,[[9,"Bone006",-118,[0,"0b/yPLcR1FiZPqyfaG8HBZ",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"0fPapM97RGmYmlB69FuuSF",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",21,[[19,-119,[2,"f3T3OFBBJBYrGbPSQ+k7GJ"],[45],[3],20,46,47]],[0,"08LJZ1ezRCiqnszI5cXQTx",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",21,[-120],[0,"c9g0zchT9L8IQmY+99TABR",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",72,[[9,"Bone003",-121,[0,"d8OdalQsZKwLFf2mFuR1VJ",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"ecFy8CTgxCib8Fky/YcoUL",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",21,[-122],[0,"91+xPZxDtGRp/x7cNrBUhM",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",74,[[9,"Bone006",-123,[0,"66R8TA3S1NT4HLywjDiP1Q",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"963dgjTmdES7q6KBvCTllJ",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",23,[[19,-124,[2,"d0A5LfhGhAfrDnBGJ3JzOe"],[50],[3],22,51,52]],[0,"203+J3Vb1LP7KUgkjLvNtX",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",23,[-125],[0,"9eOEdVVahA+rbDiF4AJNNX",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",77,[[9,"Bone003",-126,[0,"3aJII/zG9KaYapX0uizphW",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"48r+NZR1BD7Y5qEv/ruQsO",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",23,[-127],[0,"469eCD0ttKHZacZ3xtfeuD",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",79,[[9,"Bone006",-128,[0,"1fFpy0ihVOYbzhBLRLkL1Y",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"d9iCqzyppAILXebiHSqtDk",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",25,[[19,-129,[2,"161SEdWiFO/abXxUI8RkYk"],[55],[3],24,56,57]],[0,"80TsYKkUVBAIbPGc2Ao+X4",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",25,[-130],[0,"54j/6cneBCF4PpXQIO+ZrT",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone002",82,[[9,"Bone003",-131,[0,"6aDs2ciZhDh6tahiNmO4QO",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"1er+9JvftCj5j548DE5PNk",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",25,[-132],[0,"c8ON8aNTZH1YV9KZsolNGO",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[6,"Bone005",84,[[9,"Bone006",-133,[0,"1eZ45FwjhMoY5AmDd/ApaW",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"7fkJUsKFZMHbutZKiHcKAf",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]]],0,[0,13,1,0,-1,2,0,-2,4,0,-3,6,0,-4,8,0,-5,10,0,-6,12,0,-7,14,0,-8,16,0,-9,18,0,-10,20,0,-11,22,0,-12,24,0,0,2,0,-1,3,0,-1,26,0,-2,27,0,-3,29,0,0,4,0,-1,5,0,-1,31,0,-2,32,0,-3,34,0,0,6,0,-1,7,0,-1,36,0,-2,37,0,-3,39,0,0,8,0,-1,9,0,-1,41,0,-2,42,0,-3,44,0,0,10,0,-1,11,0,-1,46,0,-2,47,0,-3,49,0,0,12,0,-1,13,0,-1,51,0,-2,52,0,-3,54,0,0,14,0,-1,15,0,-1,56,0,-2,57,0,-3,59,0,0,16,0,-1,17,0,-1,61,0,-2,62,0,-3,64,0,0,18,0,-1,19,0,-1,66,0,-2,67,0,-3,69,0,0,20,0,-1,21,0,-1,71,0,-2,72,0,-3,74,0,0,22,0,-1,23,0,-1,76,0,-2,77,0,-3,79,0,0,24,0,-1,25,0,-1,81,0,-2,82,0,-3,84,0,0,26,0,-1,28,0,2,28,0,-1,30,0,2,30,0,0,31,0,-1,33,0,2,33,0,-1,35,0,2,35,0,0,36,0,-1,38,0,2,38,0,-1,40,0,2,40,0,0,41,0,-1,43,0,2,43,0,-1,45,0,2,45,0,0,46,0,-1,48,0,2,48,0,-1,50,0,2,50,0,0,51,0,-1,53,0,2,53,0,-1,55,0,2,55,0,0,56,0,-1,58,0,2,58,0,-1,60,0,2,60,0,0,61,0,-1,63,0,2,63,0,-1,65,0,2,65,0,0,66,0,-1,68,0,2,68,0,-1,70,0,2,70,0,0,71,0,-1,73,0,2,73,0,-1,75,0,2,75,0,0,76,0,-1,78,0,2,78,0,-1,80,0,2,80,0,0,81,0,-1,83,0,2,83,0,-1,85,0,2,85,0,22,1,133],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11],[5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3]],[[[41,"seafloor",[{"rasterizerState":{},"blendState":{"targets":[{}]},"depthStencilState":{}}],[{"USE_ALBEDO_MAP":true}],[[[{"metallic":0.400000005960464,"roughness":0.70710676908493,"alphaThreshold":0},"albedoScale",8,[1,1,1,1],"mainTexture",6,0]],11]]],0,0,[0,0],[15,16],[24,15]],[[[41,"tree",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_OUTLINE_PASS":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true}],[[{},[{},"specular",8,[4,16777215],"mainTexture",6,0],{},{}],0,11,0,0]]],0,0,[0,0],[15,16],[25,13]],[[[97,"main"],[78,"Canvas",33554432,"21RHrfhuBEaKfHxl6MnKXZ",[-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25],[[1,-1,[5,960,640]],[99,-3,-2],[100,45,-5.684341886080802e-14,-5.684341886080802e-14,-4],[102,-7,-6,-5]],[1,479.99999999999994,320,0]],[33,"提现数量",false,33554432,1,[-30,-31,-32,-33,-34,-35,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-46],[[[31,"pageView-horizontal",-26,[5,400,400]],[34,"pageView-horizontal",1,0,-27,[4,4294440444],62],[36,"pageView-horizontal",false,-28],-29],4,4,4,1],[1,13.06,8.798,0]],[33,"充值数量",false,33554432,1,[-51,-52,-53,-54,-55,-56,-57,-58,-59,-60,-61,-62,-63],[[[31,"pageView-horizontal",-47,[5,400,400]],[34,"pageView-horizontal",1,0,-48,[4,4294440444],63],[36,"pageView-horizontal",false,-49],-50],4,4,4,1],[1,13.06,8.798,0]],[54,"view",33554432,[-71,-72,-73,-74,-75,-76,-77],[[[1,-64,[5,400,300]],[28,-65],-66,[107,-70,-69,-68,-67]],4,4,1,4],[1,0,-0.398,0]],[8,"Button-001",33554432,3,[-93],[[1,-78,[5,100,40]],[21,1,0,-79,[4,4293643911],25],[10,2,-82,[[11,"d894bqQF01JYqH5sL9htC9/","text",-81]],[4,4292269782],-80,26,27,28,29],[109,-86,-85,-84,-83],[111,-92,-91,-90,-89,-88,-87]],[1,-86,-126.605,0]],[33,"弹窗",false,33554432,1,[-98,-99,-100,-101],[[[31,"pageView-horizontal",-94,[5,400,200]],[34,"pageView-horizontal",1,0,-95,[4,4294440444],41],[36,"pageView-horizontal",false,-96],-97],4,4,4,1],[1,-0.94,22.798,0]],[8,"Button-001",33554432,6,[-111],[[1,-102,[5,100,40]],[21,1,0,-103,[4,4293643911],36],[10,2,-106,[[11,"1d631zpvopGu6QN11mMr05g","close",-105]],[4,4292269782],-104,37,38,39,40],[65,-108,-107],[116,-110,-109]],[1,8,-38,0]],[8,"Button-001",33554432,2,[-131],[[1,-112,[5,100,40]],[21,1,0,-113,[4,4293643911],54],[10,2,-116,[[11,"a068aX7dtJAv74XQag5FB9n","takecoin",-115]],[4,4292269782],-114,55,56,57,58],[117,-122,-121,-120,-119,-118,-117],[119,-130,-129,-128,-127,-126,-125,-124,-123]],[1,-86,-135.687,0]],[8,"个人信息",33554432,1,[-143],[[1,-132,[5,100,40]],[22,1,0,-133,103],[10,2,-136,[[11,"2a9a84aVMpE2ZvMkbJqc0mU","changeUserData",-135]],[4,4292269782],-134,104,105,106,107],[121,-139,-138,-137],[70,-142,-141,-140]],[1,8,46,0]],[33,"提现地址",false,33554432,1,[-148,-149,-150,-151],[[[31,"pageView-horizontal",-144,[5,400,300]],[34,"pageView-horizontal",1,0,-145,[4,4294440444],155],[36,"pageView-horizontal",false,-146],-147],4,4,4,1],[1,-0.94,22.798,0]],[39,"Item",33554432,[-160,-161,-162,-163,-164],[[14,-152,[5,500,400],[0,0.5,1]],[122,-158,-157,-156,-155,-154,-153],[124,-159]],[1,0,96,0]],[8,"充值",33554432,1,[-172],[[1,-165,[5,100,40]],[22,1,0,-166,3],[10,2,-169,[[11,"f1ef2cIlPRMf7DqznSUmC33","recharge",-168]],[4,4292269782],-167,4,5,6,7],[103,-171,-170]],[1,4,208,0]],[33,"充值选择",false,33554432,1,[-177,-178,-179],[[[31,"pageView-horizontal",-173,[5,400,200]],[34,"pageView-horizontal",1,0,-174,[4,4294440444],75],[36,"pageView-horizontal",false,-175],-176],4,4,4,1],[1,-0.94,22.798,0]],[39,"Button",33554432,[-188],[[1,-180,[5,100,40]],[21,1,0,-181,[4,4293643911],8],[10,2,-184,[[11,"e0f80zveGpGMKehbGHBUZ0y","choseDds",-183]],[4,4292269782],-182,9,10,11,12],[71,-187,-186,-185]],[1,94,-38,0]],[39,"Button",33554432,[-196],[[1,-189,[5,100,40]],[21,1,0,-190,[4,4293643911],14],[10,2,-193,[[11,"a949arMe05AOaRUaqeKP9PR","closeRechargenum",-192]],[4,4292269782],-191,15,16,17,18],[66,-195,-194]],[1,94,-124.605,0]],[8,"Button",33554432,3,[-204],[[1,-197,[5,20,20]],[35,0,-198,[4,4278848010],20],[10,2,-201,[[11,"a949arMe05AOaRUaqeKP9PR","closeRechargenum",-200]],[4,4292269782],-199,21,22,23,24],[66,-203,-202]],[1,200.344,199.903,0]],[8,"Button",33554432,6,[-212],[[1,-205,[5,20,20]],[35,0,-206,[4,4278848010],31],[10,2,-209,[[11,"a949arMe05AOaRUaqeKP9PR","closetanchuan",-208]],[4,4292269782],-207,32,33,34,35],[65,-211,-210]],[1,200.344,100.491,0]],[8,"Button",33554432,2,[-220],[[1,-213,[5,100,40]],[21,1,0,-214,[4,4293643911],43],[10,2,-217,[[11,"a949arMe05AOaRUaqeKP9PR","closeWithdrawalData",-216]],[4,4292269782],-215,44,45,46,47],[67,-219,-218]],[1,94,-133.744,0]],[8,"Button",33554432,2,[-228],[[1,-221,[5,20,20]],[35,0,-222,[4,4278848010],49],[10,2,-225,[[11,"a949arMe05AOaRUaqeKP9PR","closeWithdrawalData",-224]],[4,4292269782],-223,50,51,52,53],[67,-227,-226]],[1,200.344,199.903,0]],[8,"Button",33554432,13,[-236],[[1,-229,[5,20,20]],[35,0,-230,[4,4278848010],65],[10,2,-233,[[11,"a949arMe05AOaRUaqeKP9PR","closerechageModel",-232]],[4,4292269782],-231,66,67,68,69],[112,-235,-234]],[1,200.344,100.491,0]],[8,"Button-001",33554432,13,[-245],[[1,-237,[5,100,40]],[21,1,0,-238,[4,4293643911],70],[10,2,-241,[[11,"e0f80zveGpGMKehbGHBUZ0y","choseCoin",-240]],[4,4292269782],-239,71,72,73,74],[71,-244,-243,-242]],[1,-86,-38,0]],[8,"提现",33554432,1,[-253],[[1,-246,[5,100,40]],[22,1,0,-247,81],[10,2,-250,[[11,"a068aX7dtJAv74XQag5FB9n","openWithdrawalModal",-249]],[4,4292269782],-248,82,83,84,85],[120,-252,-251]],[1,6,120,0]],[33,"提现选择",false,33554432,1,[-258,-259,-260],[[[31,"pageView-horizontal",-254,[5,400,200]],[34,"pageView-horizontal",1,0,-255,[4,4294440444],102],[36,"pageView-horizontal",false,-256],-257],4,4,4,1],[1,-0.94,22.798,0]],[39,"Button",33554432,[-269],[[1,-261,[5,100,40]],[21,1,0,-262,[4,4293643911],86],[10,2,-265,[[11,"a068aX7dtJAv74XQag5FB9n","choseDds",-264]],[4,4292269782],-263,87,88,89,90],[69,-268,-267,-266]],[1,94,-38,0]],[8,"Button",33554432,23,[-277],[[1,-270,[5,20,20]],[35,0,-271,[4,4278848010],92],[10,2,-274,[[11,"a949arMe05AOaRUaqeKP9PR","closeWithdrawalModal",-273]],[4,4292269782],-272,93,94,95,96],[113,-276,-275]],[1,200.344,100.491,0]],[8,"Button-001",33554432,23,[-286],[[1,-278,[5,100,40]],[21,1,0,-279,[4,4293643911],97],[10,2,-282,[[11,"a068aX7dtJAv74XQag5FB9n","choseCoin",-281]],[4,4292269782],-280,98,99,100,101],[69,-285,-284,-283]],[1,-86,-38,0]],[39,"Button",33554432,[-294],[[1,-287,[5,30,30]],[35,0,-288,[4,4278848010],109],[10,2,-291,[[11,"a949arMe05AOaRUaqeKP9PR","closeUserdata",-290]],[4,4292269782],-289,110,111,112,113],[114,-293,-292]],[1,200.344,149.669,0]],[8,"nft",33554432,1,[-301],[[1,-295,[5,100,40]],[22,1,0,-296,115],[10,2,-299,[[11,"f1ef2cIlPRMf7DqznSUmC33","createNft",-298]],[4,4292269782],-297,116,117,118,119],[56,-300]],[1,8,-18,0]],[8,"out",33554432,1,[-308],[[1,-302,[5,100,40]],[22,1,0,-303,120],[10,2,-306,[[11,"a949arMe05AOaRUaqeKP9PR","getOut",-305]],[4,4292269782],-304,121,122,123,124],[68,-307]],[1,8,-188,0]],[8,"Button",33554432,1,[-315],[[1,-309,[5,100,40]],[22,1,0,-310,125],[10,2,-313,[[11,"f1ef2cIlPRMf7DqznSUmC33","getRechargeNew",-312]],[4,4292269782],-311,126,127,128,129],[56,-314]],[1,9.456,-71.867,0]],[79,"Button-001",512,33554432,1,[-322],[[1,-316,[5,100,40]],[22,1,0,-317,130],[10,2,-320,[[11,"f1ef2cIlPRMf7DqznSUmC33","takeWhData",-319]],[4,4292269782],-318,131,132,133,134],[56,-321]],[1,9.456,-127.867,0]],[8,"Button",33554432,10,[-330],[[1,-323,[5,20,20]],[35,0,-324,[4,4278848010],140],[10,2,-327,[[11,"a949arMe05AOaRUaqeKP9PR","closeMain",-326]],[4,4292269782],-325,141,142,143,144],[115,-329,-328]],[1,200.344,146.491,0]],[33,"代充地址",false,33554432,1,[-335,-336,-337],[[[31,"pageView-horizontal",-331,[5,400,200]],[34,"pageView-horizontal",1,0,-332,[4,4294440444],172],[36,"pageView-horizontal",false,-333],-334],4,4,4,1],[1,-0.94,22.798,0]],[39,"Button",33554432,[-345],[[1,-338,[5,100,40]],[21,1,0,-339,[4,4293643911],156],[10,2,-342,[[11,"a949arMe05AOaRUaqeKP9PR","closeSubstitute",-341]],[4,4292269782],-340,157,158,159,160],[58,-344,-343]],[1,94,-38,0]],[8,"Button",33554432,33,[-353],[[1,-346,[5,20,20]],[35,0,-347,[4,4278848010],162],[10,2,-350,[[11,"a949arMe05AOaRUaqeKP9PR","closeSubstitute",-349]],[4,4292269782],-348,163,164,165,166],[58,-352,-351]],[1,200.344,100.491,0]],[8,"Button-001",33554432,33,[-361],[[1,-354,[5,100,40]],[21,1,0,-355,[4,4293643911],167],[10,2,-358,[[11,"a949arMe05AOaRUaqeKP9PR","closeSubstitute",-357]],[4,4292269782],-356,168,169,170,171],[58,-360,-359]],[1,-86,-38,0]],[127,"main",[-366,-367,-368,-369,-370,1],[95,[],[-362,-363,-364,-365]],[128,[129,0.78125,[2,0.2,0.5019607843137255,0.8,0.520833125],[2,0.2,0.5019607843137255,0.8,0.520833125]],[130,true,1,1,[4,1929379840],[0,512,512]],[131,true,177,178],[132,[4,4292993505]],[133]]],[110,3],[134,6],[118,2],[33,"UserData",false,33554432,1,[4,27],[[[31,"pageView-horizontal",-371,[5,400,300]],[34,"pageView-horizontal",1,0,-372,[4,4294440444],114],[36,"pageView-horizontal",false,-373],-374],4,4,4,1],[1,-0.94,22.798,0]],[8,"view",33554432,10,[-377,-378,-379,-380],[[1,-375,[5,400,250]],[28,-376]],[1,-2,-14,0]],[92,"ScrollView",false,33554432,1,[-384,-385,-386],[[[1,-381,[5,500,250]],[22,1,0,-382,176],-383],4,4,1]],[39,"content",33554432,[-388,-389,-390,-391,-392],[[14,-387,[5,500,50],[0,0.5,1]]],[1,0,24,0]],[135,13],[51,"RechageNum",33554432,3,[-396,-397],[[[1,-393,[5,160,40]],[22,1,0,-394,13],-395],4,4,1],[1,49.99999999999994,2.0459999999999923,0]],[51,"withdrawalNum",33554432,2,[-401,-402],[[[1,-398,[5,160,40]],[22,1,0,-399,42],-400],4,4,1],[1,49.99999999999994,0.04599999999999227,0]],[51,"toAddress",33554432,2,[-406,-407],[[[1,-403,[5,160,40]],[21,1,0,-404,[4,4294177784],59],-405],4,4,1],[1,50,-79.954,0]],[54,"Toggle1",33554432,[-411],[[[1,-408,[5,32,32]],[64,0,-409,61],-410],4,4,1],[1,-5.664,3.885,0]],[54,"Toggle2",33554432,[-415],[[[1,-412,[5,32,32]],[64,0,-413,60],-414],4,4,1],[1,85.475,3.885,0]],[80,"充值记录",false,33554432,1,[-420],[[1,-416,[5,100,40]],[22,1,0,-417,76],[57,2,-419,[4,4292269782],-418,77,78,79,80]],[1,6,100,0]],[8,"EditBox",33554432,42,[-426,-427],[[1,-421,[5,160,40]],[22,1,0,-422,135],[72,6,8,-425,-424,-423,136]],[1,18,32,0]],[8,"EditBox-001",33554432,42,[-433,-434],[[1,-428,[5,160,40]],[22,1,0,-429,137],[72,6,8,-432,-431,-430,138]],[1,18,92,0]],[8,"Button-001",33554432,10,[-439],[[1,-435,[5,100,40]],[21,1,0,-436,[4,4293643911],145],[57,2,-438,[4,4292269782],-437,146,147,148,149]],[1,-86,-66,0]],[8,"Button",33554432,10,[-444],[[1,-440,[5,100,40]],[21,1,0,-441,[4,4293643911],150],[57,2,-443,[4,4292269782],-442,151,152,153,154]],[1,94,-66,0]],[42,"view",33554432,33,[-447,34,-448],[[1,-445,[5,400,200]],[28,-446]]],[51,"scrollBar",33554432,43,[-453],[[[14,-449,[5,12,250],[0,1,0.5]],[22,1,0,-450,173],[101,37,250,1,-451],-452],4,4,4,1],[1,250,0,0]],[42,"view",33554432,13,[-456,14],[[1,-454,[5,400,200]],[28,-455]]],[73,"",20,20,[4,4279505942]],[140,23],[42,"view",33554432,23,[-459,24],[[1,-457,[5,400,200]],[28,-458]]],[8,"view",33554432,43,[-463],[[1,-460,[5,500,200]],[28,-461],[125,-462,[[47,null,null,null,null,null],[47,null,null,null,null,null],[47,null,null,null,null,null],[47,null,null,null,null,null],[47,null,null,null,null,null]],175]],[1,0,-22,0]],[4,["05cqZo8fxFQJfAkL2Aq/5W"]],[59,5,8,46],[42,"view",33554432,3,[15],[[1,-464,[5,400,400]],[28,-465]]],[136,"",0,21,20,20,2,[4,4279045390]],[59,3,8,47],[24,"Label",512,33554432,18,[[1,-466,[5,100,40]],[15,"取消",20,20,1,false,-467,[4,4278190080]],[68,-468]]],[42,"view",33554432,2,[-471],[[1,-469,[5,400,400]],[28,-470]]],[59,6,64,48],[73,"",20,20,[4,4279505942]],[141,49,[4,4292269782],49],[8,"ToggleGroup",33554432,2,[49,50],[[143,-472]],[1,44.68,-44.68,0]],[142,false,50,[4,4292269782],50],[137,"",20,20,1,2,[4,4278321666]],[108,4],[144,33],[8,"view-001",33554432,43,[44],[[1,-473,[5,500,50]],[28,-474]],[1,0,100,0]],[50,0,null,37,[52,"26LvC5hbxAuJZ9Jl2SB/IV",-475,[60,"cdNOYl3LRPhapW8a8hi/Iy",null,[[12,["lightmapSettings"],[4,["ddvMFij+ZIL5lu+/NQX8Nf"]],[3]],[12,["lightmapSettings"],[4,["e3XMjUJKFLH41z39JaWzyB"]],[3]],[75,["position"],[4,["fd517lz3tOuqVWGd5300X6"]],[1,-1.341,0.805,-2.555]],[12,["lightmapSettings"],[4,["a5Viy6l3VLDpf6gY5yZF+v"]],[3]],[23,1,["_shadowCastingMode"],[4,["a5Viy6l3VLDpf6gY5yZF+v"]]],[12,["lightmapSettings"],[4,["e4If/bQrJCsb9D9JopZa2h"]],[3]],[12,["lightmapSettings"],[4,["d7Vkz0NV5Mn4RUce28JVTp"]],[3]],[12,["lightmapSettings"],[4,["3eVATgLQJKDbqOvE33W2uc"]],[3]],[12,["lightmapSettings"],[4,["2akU/MgO5Ovo6QcS0c/I7e"]],[3]],[12,["lightmapSettings"],[4,["54xaKIQbtPLK5r21VY0qmM"]],[3]],[12,["lightmapSettings"],[4,["23UFBqszxJ/6Otof04QwYT"]],[3]],[12,["lightmapSettings"],[4,["c7PE6gNTdDw45ytwlOEWR3"]],[3]]]],0]],[50,0,null,37,[52,"6dMvPN2t1B66O9Zc3HG8dr",-476,[60,"93xtJEZ71OF5Gk8u497J9k",null,[[12,["lightmapSettings"],[4,["78XZsd31xPjIsSP2888FcN"]],[3]],[12,["lightmapSettings"],[4,["ffoVYmt2NOmIBz5DHpacF8"]],[3]],[12,["lightmapSettings"],[4,["9aCVBuMeZPv6so1VxT6c40"]],[3]],[12,["lightmapSettings"],[4,["ca1srfPsJJgKKJww9GO/JE"]],[3]]]],1]],[50,0,null,37,[52,"e5Peksu5tL9peMeABb8/JC",-477,[60,"7e4SH9jydKyaQjXZtS5AiQ",null,[[12,["lightmapSettings"],[4,["a6J1jU/r1BPKNIcVMEREit"]],[3]],[23,1,["_shadowReceivingMode"],[4,["a6J1jU/r1BPKNIcVMEREit"]]],[12,["lightmapSettings"],[4,["28WH2cvhNDFbN3it+8Q+XK"]],[3]],[23,1,["_shadowReceivingMode"],[4,["28WH2cvhNDFbN3it+8Q+XK"]]],[12,["lightmapSettings"],[4,["87exLhmM1P35jx6GLN7j5f"]],[3]],[23,1,["_shadowReceivingMode"],[4,["87exLhmM1P35jx6GLN7j5f"]]],[12,["lightmapSettings"],[4,["dduLonFhNK+q908BUlLM7f"]],[3]],[23,1,["_shadowCastingMode"],[4,["dduLonFhNK+q908BUlLM7f"]]],[23,1,["_shadowReceivingMode"],[4,["dduLonFhNK+q908BUlLM7f"]]],[12,["lightmapSettings"],[4,["af0f1GeGlKf5MvKMEuH8MJ"]],[3]],[23,1,["_shadowReceivingMode"],[4,["af0f1GeGlKf5MvKMEuH8MJ"]]],[12,["lightmapSettings"],[4,["e9BPt5G81CloUmA5IJNHIQ"]],[3]],[23,1,["_shadowReceivingMode"],[4,["e9BPt5G81CloUmA5IJNHIQ"]]],[12,["lightmapSettings"],[4,["7dt8ZZ5EBNDIxOgpt1XbGu"]],[3]],[23,1,["_shadowReceivingMode"],[4,["7dt8ZZ5EBNDIxOgpt1XbGu"]]],[12,["lightmapSettings"],[4,["c4Nekl9YtKUKupS0ASX7It"]],[3]],[23,1,["_shadowReceivingMode"],[4,["c4Nekl9YtKUKupS0ASX7It"]]],[12,["lightmapSettings"],[4,["b9cuhcVRxPvZTPHcAyE7eS"]],[3]],[23,1,["_shadowReceivingMode"],[4,["b9cuhcVRxPvZTPHcAyE7eS"]]],[12,["lightmapSettings"],[4,["f3T3OFBBJBYrGbPSQ+k7GJ"]],[3]],[23,1,["_shadowReceivingMode"],[4,["f3T3OFBBJBYrGbPSQ+k7GJ"]]],[12,["lightmapSettings"],[4,["d0A5LfhGhAfrDnBGJ3JzOe"]],[3]],[23,1,["_shadowReceivingMode"],[4,["d0A5LfhGhAfrDnBGJ3JzOe"]]],[12,["lightmapSettings"],[4,["161SEdWiFO/abXxUI8RkYk"]],[3]],[23,1,["_shadowReceivingMode"],[4,["161SEdWiFO/abXxUI8RkYk"]]]]],2]],[32,"Label",33554432,12,[[1,-478,[5,100,40]],[15,"充值",20,20,1,false,-479,[4,4278190080]]]],[5,"Label",33554432,58,[[1,-480,[5,240,50.4]],[7,"选择需要充值的游戏币种类",20,20,-481,[4,4278321666]]],[1,2,40,0]],[32,"Label",33554432,14,[[1,-482,[5,100,40]],[15,"钻石",20,20,1,false,-483,[4,4278190080]]]],[5,"Label",33554432,3,[[1,-484,[5,85.56,50.4]],[7,"充值数量:",20,20,-485,[4,4278321666]]],[1,-82,4.045999999999992,0]],[43,"TEXT_LABEL",false,33554432,46,[[[14,-486,[5,140,20],[0,0,1]],-487],4,1],[1,-69.476,10,0]],[16,"PLACEHOLDER_LABEL",33554432,46,[[[14,-488,[5,158,40],[0,0,1]],-489],4,1],[1,-78,22.523,0]],[24,"Label",512,33554432,15,[[1,-490,[5,100,40]],[15,"取消",20,20,1,false,-491,[4,4278190080]]]],[5,"Label",33554432,16,[[1,-492,[5,100,40]],[37,"",20,20,1,false,-493,[4,4278190080],19]],[1,-12,0,0]],[24,"Label",512,33554432,5,[[1,-494,[5,100,40]],[15,"直充",20,20,1,false,-495,[4,4278190080]]]],[16,"privateddress",33554432,3,[[[1,-496,[5,200,40]],66],4,1],[1,69.303,-46,0]],[16,"ethPrice",33554432,3,[[[1,-497,[5,0,50.4]],59],4,1],[1,22,55.462,0]],[5,"news",33554432,6,[[1,-498,[5,80,50.4]],[7,"获取失败",20,20,-499,[4,4278321666]]],[1,12,34,0]],[32,"view",33554432,6,[[1,-500,[5,400,200]],[28,-501]]],[5,"Label",33554432,17,[[1,-502,[5,100,40]],[37,"",20,20,1,false,-503,[4,4278190080],30]],[1,-12,0,0]],[24,"Label",512,33554432,7,[[1,-504,[5,100,40]],[15,"确定",20,20,1,false,-505,[4,4278190080]]]],[16,"TEXT_LABEL",33554432,47,[[[14,-506,[5,158,40],[0,0,1]],-507],4,1],[1,-78,20,0]],[43,"PLACEHOLDER_LABEL",false,33554432,47,[[[14,-508,[5,158,40],[0,0,1]],-509],4,1],[1,-78,20,0]],[5,"Label",33554432,69,[[1,-510,[5,85.56,50.4]],[7,"提现数量:",20,20,-511,[4,4278321666]]],[1,-82,0.046,0]],[5,"Label",33554432,19,[[1,-512,[5,100,40]],[37,"",20,20,1,false,-513,[4,4278190080],48]],[1,-12,0,0]],[24,"Label",512,33554432,8,[[1,-514,[5,100,40]],[15,"提现",20,20,1,false,-515,[4,4278190080]]]],[16,"TEXT_LABEL",33554432,48,[[[14,-516,[5,158,40],[0,0,1]],-517],4,1],[1,-78,20,0]],[43,"PLACEHOLDER_LABEL",false,33554432,48,[[[14,-518,[5,158,40],[0,0,1]],-519],4,1],[1,-78,20,0]],[16,"name",33554432,2,[[[1,-520,[5,0,50.4]],71],4,1],[1,20,142.872,0]],[90,"usdt",false,33554432,50,[[[31,"Checkmark",-521,[5,32,32]],-522],4,1]],[91,"eth",33554432,49,[[[1,-523,[5,32,32]],-524],4,1]],[5,"ETH比例:",33554432,2,[[1,-525,[5,100,50.4]],[7,"ETH比例:",20,20,-526,[4,4279505942]]],[1,-78.404,49.706,0]],[5,"USDT比例:",33554432,2,[[1,-527,[5,114.44,50.4]],[7,"USDT比例:",20,20,-528,[4,4279505942]]],[1,-83.78,95.862,0]],[5,"提现货币名:",33554432,2,[[1,-529,[5,140,50.4]],[7,"提现游戏币名:",20,20,-530,[4,4279505942]]],[1,-96.707,142.018,0]],[5,"ethPrice",33554432,2,[[1,-531,[5,0,50.4]],[7,"",20,20,-532,[4,4279505942]]],[1,22,51.462,0]],[5,"usdtPrice",33554432,2,[[1,-533,[5,0,50.4]],[7,"",20,20,-534,[4,4279505942]]],[1,22,93.412,0]],[5,"Label-003",33554432,2,[[1,-535,[5,80,50.4]],[7,"提现成:",20,20,-536,[4,4279045390]]],[1,-71.131,-42.738,0]],[5,"Label-004",33554432,2,[[1,-537,[5,40,50.4]],[7,"ETH",20,20,-538,[4,4279374356]]],[1,-5.828,-40.795,0]],[5,"Label-005",33554432,2,[[1,-539,[5,54.44,50.4]],[7,"USDT",20,20,-540,[4,4279374356]]],[1,85.475,-40.795,0]],[5,"提现地址",33554432,2,[[1,-541,[5,100,50.4]],[7,"提现地址:",20,20,-542,[4,4279505942]]],[1,-78.707,-77.982,0]],[5,"Label",33554432,3,[[1,-543,[5,100,50.4]],[7,"ETH比例:",20,20,-544,[4,4279505942]]],[1,-78.404,49.706,0]],[5,"Label-001",33554432,3,[[1,-545,[5,114.44,50.4]],[7,"USDT比例:",20,20,-546,[4,4279505942]]],[1,-83.78,95.862,0]],[5,"货币名称",33554432,3,[[1,-547,[5,120,50.4]],[7,"充值货币名:",20,20,-548,[4,4279505942]]],[1,-80.707,142.018,0]],[16,"usdtPrice",33554432,3,[[[1,-549,[5,0,50.4]],-550],4,1],[1,22,99.412,0]],[16,"name",33554432,3,[[[1,-551,[5,0,50.4]],-552],4,1],[1,20,146.872,0]],[5,"Label-002",33554432,3,[[1,-553,[5,100,50.4]],[7,"代充地址:",20,20,-554,[4,4278387459]]],[1,-80,-46,0]],[5,"Label",33554432,20,[[1,-555,[5,100,40]],[37,"",20,20,1,false,-556,[4,4278190080],64]],[1,-12,0,0]],[32,"Label",33554432,21,[[1,-557,[5,100,40]],[15,"金币",20,20,1,false,-558,[4,4278190080]]]],[5,"Label",33554432,51,[[1,-559,[5,100,40]],[15,"充值记录",20,20,1,false,-560,[4,4278190080]]],[1,2,2,0]],[32,"Label",33554432,22,[[1,-561,[5,100,40]],[15,"提现",20,20,1,false,-562,[4,4278190080]]]],[5,"Label",33554432,61,[[1,-563,[5,240,50.4]],[7,"请选择要提现的游戏币种类",20,20,-564,[4,4278321666]]],[1,2,40,0]],[32,"Label",33554432,24,[[1,-565,[5,100,40]],[15,"钻石",20,20,1,false,-566,[4,4278190080]]]],[5,"Label",33554432,25,[[1,-567,[5,100,40]],[37,"",20,20,1,false,-568,[4,4278190080],91]],[1,-12,0,0]],[32,"Label",33554432,26,[[1,-569,[5,100,40]],[15,"金币",20,20,1,false,-570,[4,4278190080]]]],[32,"Label",33554432,9,[[1,-571,[5,100,40]],[15,"个人信息",20,20,1,false,-572,[4,4278190080]]]],[70,41,75,76],[5,"Label-002",33554432,4,[[1,-573,[5,100,50.4]],[7,"钱包地址:",20,20,-574,[4,4278321666]]],[1,-140,-36.474,0]],[16,"address",33554432,4,[[[1,-575,[5,250,80]],75],4,1],[1,39.296,-58.126,0]],[16,"coin",33554432,4,[[[1,-576,[5,80,50.4]],-577],4,1],[1,-56,59.526,0]],[5,"Label",33554432,4,[[1,-578,[5,80,50.4]],[7,"个人信息",20,20,-579,[4,4278716424]]],[1,0,112,0]],[5,"Label-001",33554432,4,[[1,-580,[5,60,50.4]],[7,"金币:",20,20,-581,[4,4278913804]]],[1,-118,12,0]],[5,"Label-003",33554432,4,[[1,-582,[5,60,50.4]],[7,"钻石:",20,20,-583,[4,4278913804]]],[1,-118,56,0]],[16,"Diamonds",33554432,4,[[[1,-584,[5,80,50.4]],-585],4,1],[1,-56,13.526,0]],[5,"Label",33554432,27,[[1,-586,[5,100,40]],[37,"",20,20,1,false,-587,[4,4278190080],108]],[1,-12,0,0]],[81,"Label",512,33554432,28,[[1,-588,[5,100,40]],[15,"创建nft",20,20,1,false,-589,[4,4278190080]]],[1,-2,0,0]],[24,"Label",512,33554432,29,[[1,-590,[5,100,40]],[15,"退出",20,20,1,false,-591,[4,4278190080]]]],[24,"Label",512,33554432,30,[[1,-592,[5,100,40]],[15,"充值记录",20,20,1,false,-593,[4,4278190080]]]],[24,"Label",512,33554432,31,[[1,-594,[5,100,40]],[15,"提现记录",20,20,1,false,-595,[4,4278190080]]]],[5,"Label",33554432,42,[[1,-596,[5,85.56,50.4]],[7,"提现地址:",20,20,-597,[4,4278321666]]],[1,-116,34,0]],[43,"TEXT_LABEL",false,33554432,52,[[[14,-598,[5,158,40],[0,0,1]],-599],4,1],[1,-78,20,0]],[16,"PLACEHOLDER_LABEL",33554432,52,[[[14,-600,[5,158,40],[0,0,1]],-601],4,1],[1,-78,20,0]],[5,"Label-001",33554432,42,[[1,-602,[5,85.56,50.4]],[7,"提现数量:",20,20,-603,[4,4278321666]]],[1,-116,92,0]],[43,"TEXT_LABEL",false,33554432,53,[[[14,-604,[5,158,40],[0,0,1]],-605],4,1],[1,-78,20,0]],[16,"PLACEHOLDER_LABEL",33554432,53,[[[14,-606,[5,158,40],[0,0,1]],-607],4,1],[1,-78,20,0]],[5,"Label",33554432,32,[[1,-608,[5,100,40]],[37,"",20,20,1,false,-609,[4,4278190080],139]],[1,-12,0,0]],[24,"Label",512,33554432,54,[[1,-610,[5,100,40]],[15,"确定",20,20,1,false,-611,[4,4278190080]]]],[24,"Label",512,33554432,55,[[1,-612,[5,100,40]],[15,"取消",20,20,1,false,-613,[4,4278190080]]]],[5,"Label",33554432,56,[[1,-614,[5,140,50.4]],[7,"代充收款地址:",20,20,-615,[4,4278321666]]],[1,-116,34,0]],[24,"Label",512,33554432,34,[[1,-616,[5,100,40]],[15,"取消",20,20,1,false,-617,[4,4278190080]]]],[5,"Address",33554432,56,[[1,-618,[5,0,50.4]],[138,"",20,20,1,-619,[4,4278321666]]],[1,-54,40,0]],[5,"Label",33554432,35,[[1,-620,[5,100,40]],[37,"",20,20,1,false,-621,[4,4278190080],161]],[1,-12,0,0]],[24,"Label",512,33554432,36,[[1,-622,[5,100,40]],[15,"确定",20,20,1,false,-623,[4,4278190080]]]],[16,"bar",33554432,57,[[[14,-624,[5,10,156.25],[0,0,0]],-625],4,1],[1,-11,-31.25,0]],[16,"BCTYPE",33554432,11,[[[1,-626,[5,0,25.2]],-627],4,1],[1,-198,-10.15,0]],[16,"Num",33554432,11,[[[14,-628,[5,0,25.2],[0,0,1]],-629],4,1],[1,-126,-10.15,0]],[16,"type",33554432,11,[[[14,-630,[5,0,25.2],[0,0,1]],-631],4,1],[1,-60,-10.15,0]],[16,"Price",33554432,11,[[[14,-632,[5,0,25.2],[0,0,1]],-633],4,1],[1,46,-10.15,0]],[16,"time",33554432,11,[[[14,-634,[5,0,25.2],[0,0,1]],-635],4,1],[1,154,-10.15,0]],[50,0,{},62,[52,"05cqZo8fxFQJfAkL2Aq/5W",-636,[145,"09hM/YS2NEfYPfVZoQ8nns",[[146,"Item",["_name"],63],[53,["_lpos"],63,[1,0,96,0]],[53,["_lscale"],63,[1,1,1,1]],[53,["_lrot"],63,[3,0,0,0,1]],[53,["_euler"],63,[1,0,0,0]],[75,["_contentSize"],[4,["9e8hEPMOBHZZQS4qWt6EuF"]],[5,500,50]]],[[4,["67/913JQBC47FHx3PHDYk+"]]]],174]],[5,"item",33554432,44,[[14,-637,[5,64,25.2],[0,0,1]],[29,"充值类型",0,0,16,16,20,-638,[4,4278190080]]],[1,-196,-10.15,0]],[5,"item-001",33554432,44,[[14,-639,[5,64,25.2],[0,0,1]],[29,"充值数量",0,0,16,16,20,-640,[4,4278190080]]],[1,-128,-10.15,0]],[5,"item-002",33554432,44,[[14,-641,[5,96,25.2],[0,0,1]],[29,"充值货币类型",0,0,16,16,20,-642,[4,4278190080]]],[1,-62,-10.15,0]],[5,"item-003",33554432,44,[[14,-643,[5,96,25.2],[0,0,1]],[29,"充值货币数量",0,0,16,16,20,-644,[4,4278190080]]],[1,48,-10.15,0]],[5,"item-004",33554432,44,[[14,-645,[5,32,25.2],[0,0,1]],[29,"时间",0,0,16,16,20,-646,[4,4278190080]]],[1,156,-10.15,0]],[62,"Main Light","c0y6F5f+pAvI805TdmxIjx",37,[[147,125000,3.2552083333333335,true,2,0.01,0.45098039215686275,10,1,50,10,-647,[148]]],[1,-2.955,3.412,5.118],[3,-0.24999999999999997,-0.24999999999999997,-0.06698729810778066,0.9330127018922194],[1,-30,-30,0]],[62,"Main Camera","c9DMICJLFO5IeO07EPon7U",37,[[149,14,1820327937,-648]],[1,0.4563737338172984,4.020698998822525,7.83104356477376],[3,-0.07236081996736556,0.03501809641207027,0.002542173940871125,0.9967603433167774],[1,-8.304321541008003,4.024165472580301,9.93923337957349e-17]],[93,"Camera",1,[-649],[1,0,0,1000]],[150,0,1073741824,320,2000,6,41943040,172,[4,4278190080]],[139,"",0,0,20,20,1,false,86,[4,4278321666]],[40,"请输入充值数量",0,20,20,1,false,87,[4,4278782218]],[40,"",0,20,20,1,false,97,[4,4279045390]],[40,"请输入提现数量",0,20,20,1,false,98,[4,4278782218]],[40,"",0,20,20,1,false,102,[4,4278913804]],[40,"请输入提现地址",0,20,20,1,false,103,[4,4278782218]],[104,"Checkmark",0,105],[105,0,106],[7,"",20,20,119,[4,4279505942]],[7,"",20,20,120,[4,4279505942]],[7,"获取失败",20,20,134,[4,4278321666]],[7,"获取失败",20,20,138,[4,4278321666]],[74,"",0,40,20,1,false,145],[40,"请输入提现地址",0,20,20,1,false,146,[4,4278782218]],[74,"",0,40,20,1,false,148],[40,"请输入提现数量",0,20,20,1,false,149,[4,4278782218]],[151,10],[106,1,0,158],[152,1,57,191],[153,0.23,0.75,false,43,11,192],[29,"",0,0,16,16,20,159,[4,4278190080]],[29,"",0,0,16,16,20,160,[4,4278190080]],[29,"",0,0,16,16,20,161,[4,4278190080]],[29,"",0,0,16,16,20,162,[4,4278190080]],[29,"",0,0,16,16,20,163,[4,4278190080]]],0,[0,0,1,0,44,173,0,0,1,0,0,1,0,45,39,0,25,38,0,0,1,0,-1,172,0,-2,12,0,-3,51,0,-4,22,0,-5,9,0,-6,28,0,-7,29,0,-8,30,0,-9,31,0,-10,3,0,-11,10,0,-12,33,0,-13,41,0,-14,43,0,-15,13,0,-16,23,0,-17,2,0,-18,6,0,0,2,0,0,2,0,0,2,0,-4,40,0,-1,47,0,-2,18,0,-3,69,0,-4,19,0,-5,8,0,-6,107,0,-7,108,0,-8,109,0,-9,110,0,-10,111,0,-11,104,0,-12,73,0,-13,112,0,-14,113,0,-15,114,0,-16,115,0,-17,48,0,0,3,0,0,3,0,0,3,0,-4,38,0,-1,85,0,-2,46,0,-3,65,0,-4,16,0,-5,5,0,-6,116,0,-7,117,0,-8,118,0,-9,92,0,-10,119,0,-11,120,0,-12,91,0,-13,121,0,0,4,0,0,4,0,-3,76,0,46,185,0,47,184,0,36,75,0,0,4,0,-1,132,0,-2,133,0,-3,134,0,-4,135,0,-5,136,0,-6,137,0,-7,138,0,0,5,0,0,5,0,4,5,0,9,5,0,0,5,0,26,59,0,27,66,0,28,64,0,0,5,0,18,39,0,26,59,0,27,66,0,48,38,0,28,64,0,0,5,0,-1,90,0,0,6,0,0,6,0,0,6,0,-4,39,0,-1,93,0,-2,94,0,-3,17,0,-4,7,0,0,7,0,0,7,0,4,7,0,9,7,0,0,7,0,18,39,0,0,7,0,18,39,0,0,7,0,-1,96,0,0,8,0,0,8,0,4,8,0,9,8,0,0,8,0,29,74,0,30,72,0,23,71,0,31,70,0,32,67,0,0,8,0,18,39,0,29,74,0,30,72,0,23,71,0,31,70,0,32,67,0,17,40,0,0,8,0,-1,101,0,0,9,0,0,9,0,4,9,0,9,9,0,0,9,0,49,76,0,50,131,0,0,9,0,51,76,0,36,75,0,0,9,0,-1,130,0,0,10,0,0,10,0,0,10,0,-4,190,0,-1,42,0,-2,32,0,-3,54,0,-4,55,0,0,11,0,37,198,0,38,197,0,39,196,0,40,195,0,41,194,0,0,11,0,0,11,0,-1,159,0,-2,160,0,-3,161,0,-4,162,0,-5,163,0,0,12,0,0,12,0,4,12,0,9,12,0,0,12,0,52,45,0,0,12,0,-1,82,0,0,13,0,0,13,0,0,13,0,-4,45,0,-1,58,0,-2,20,0,-3,21,0,0,14,0,0,14,0,4,14,0,9,14,0,0,14,0,33,45,0,42,38,0,0,14,0,-1,84,0,0,15,0,0,15,0,4,15,0,9,15,0,0,15,0,25,38,0,0,15,0,-1,88,0,0,16,0,0,16,0,4,16,0,9,16,0,0,16,0,25,38,0,0,16,0,-1,89,0,0,17,0,0,17,0,4,17,0,9,17,0,0,17,0,18,39,0,0,17,0,-1,95,0,0,18,0,0,18,0,4,18,0,9,18,0,0,18,0,17,40,0,0,18,0,-1,68,0,0,19,0,0,19,0,4,19,0,9,19,0,0,19,0,17,40,0,0,19,0,-1,100,0,0,20,0,0,20,0,4,20,0,9,20,0,0,20,0,53,45,0,0,20,0,-1,122,0,0,21,0,0,21,0,4,21,0,9,21,0,0,21,0,33,45,0,42,38,0,0,21,0,-1,123,0,0,22,0,0,22,0,4,22,0,9,22,0,0,22,0,34,60,0,0,22,0,-1,125,0,0,23,0,0,23,0,0,23,0,-4,60,0,-1,61,0,-2,25,0,-3,26,0,0,24,0,0,24,0,4,24,0,9,24,0,0,24,0,17,40,0,34,60,0,0,24,0,-1,127,0,0,25,0,0,25,0,4,25,0,9,25,0,0,25,0,54,60,0,0,25,0,-1,128,0,0,26,0,0,26,0,4,26,0,9,26,0,0,26,0,17,40,0,34,60,0,0,26,0,-1,129,0,0,27,0,0,27,0,4,27,0,9,27,0,0,27,0,55,131,0,0,27,0,-1,139,0,0,28,0,0,28,0,4,28,0,9,28,0,0,28,0,0,28,0,-1,140,0,0,29,0,0,29,0,4,29,0,9,29,0,0,29,0,0,29,0,-1,141,0,0,30,0,0,30,0,4,30,0,9,30,0,0,30,0,0,30,0,-1,142,0,0,31,0,0,31,0,4,31,0,9,31,0,0,31,0,0,31,0,-1,143,0,0,32,0,0,32,0,4,32,0,9,32,0,0,32,0,56,190,0,0,32,0,-1,150,0,0,33,0,0,33,0,0,33,0,-4,77,0,-1,56,0,-2,35,0,-3,36,0,0,34,0,0,34,0,4,34,0,9,34,0,0,34,0,35,77,0,0,34,0,-1,154,0,0,35,0,0,35,0,4,35,0,9,35,0,0,35,0,35,77,0,0,35,0,-1,156,0,0,36,0,0,36,0,4,36,0,9,36,0,0,36,0,35,77,0,0,36,0,-1,157,0,-1,79,0,-2,80,0,-3,81,0,-4,164,0,-1,170,0,-2,171,0,-3,79,0,-4,80,0,-5,81,0,0,41,0,0,41,0,0,41,0,-4,131,0,0,42,0,0,42,0,-1,144,0,-2,52,0,-3,147,0,-4,53,0,0,43,0,0,43,0,-3,193,0,-1,57,0,-2,62,0,-3,78,0,0,44,0,-1,165,0,-2,166,0,-3,167,0,-4,168,0,-5,169,0,0,46,0,0,46,0,-3,64,0,-1,86,0,-2,87,0,0,47,0,0,47,0,-3,67,0,-1,97,0,-2,98,0,0,48,0,0,48,0,-3,70,0,-1,102,0,-2,103,0,0,49,0,0,49,0,-3,72,0,-1,106,0,0,50,0,0,50,0,-3,74,0,-1,105,0,0,51,0,0,51,0,4,51,0,0,51,0,-1,124,0,0,52,0,0,52,0,19,187,0,20,186,0,0,52,0,-1,145,0,-2,146,0,0,53,0,0,53,0,19,189,0,20,188,0,0,53,0,-1,148,0,-2,149,0,0,54,0,0,54,0,4,54,0,0,54,0,-1,151,0,0,55,0,0,55,0,4,55,0,0,55,0,-1,152,0,0,56,0,0,56,0,-1,153,0,-3,155,0,0,57,0,0,57,0,0,57,0,-4,192,0,-1,158,0,0,58,0,0,58,0,-1,83,0,0,61,0,0,61,0,-1,126,0,0,62,0,0,62,0,0,62,0,-1,164,0,0,65,0,0,65,0,0,68,0,0,68,0,0,68,0,0,69,0,0,69,0,-1,99,0,0,73,0,0,78,0,0,78,0,13,79,0,13,80,0,13,81,0,0,82,0,0,82,0,0,83,0,0,83,0,0,84,0,0,84,0,0,85,0,0,85,0,0,86,0,-2,174,0,0,87,0,-2,175,0,0,88,0,0,88,0,0,89,0,0,89,0,0,90,0,0,90,0,0,91,0,0,92,0,0,93,0,0,93,0,0,94,0,0,94,0,0,95,0,0,95,0,0,96,0,0,96,0,0,97,0,-2,176,0,0,98,0,-2,177,0,0,99,0,0,99,0,0,100,0,0,100,0,0,101,0,0,101,0,0,102,0,-2,178,0,0,103,0,-2,179,0,0,104,0,0,105,0,-2,180,0,0,106,0,-2,181,0,0,107,0,0,107,0,0,108,0,0,108,0,0,109,0,0,109,0,0,110,0,0,110,0,0,111,0,0,111,0,0,112,0,0,112,0,0,113,0,0,113,0,0,114,0,0,114,0,0,115,0,0,115,0,0,116,0,0,116,0,0,117,0,0,117,0,0,118,0,0,118,0,0,119,0,-2,182,0,0,120,0,-2,183,0,0,121,0,0,121,0,0,122,0,0,122,0,0,123,0,0,123,0,0,124,0,0,124,0,0,125,0,0,125,0,0,126,0,0,126,0,0,127,0,0,127,0,0,128,0,0,128,0,0,129,0,0,129,0,0,130,0,0,130,0,0,132,0,0,132,0,0,133,0,0,134,0,-2,184,0,0,135,0,0,135,0,0,136,0,0,136,0,0,137,0,0,137,0,0,138,0,-2,185,0,0,139,0,0,139,0,0,140,0,0,140,0,0,141,0,0,141,0,0,142,0,0,142,0,0,143,0,0,143,0,0,144,0,0,144,0,0,145,0,-2,186,0,0,146,0,-2,187,0,0,147,0,0,147,0,0,148,0,-2,188,0,0,149,0,-2,189,0,0,150,0,0,150,0,0,151,0,0,151,0,0,152,0,0,152,0,0,153,0,0,153,0,0,154,0,0,154,0,0,155,0,0,155,0,0,156,0,0,156,0,0,157,0,0,157,0,0,158,0,-2,191,0,0,159,0,-2,194,0,0,160,0,-2,195,0,0,161,0,-2,196,0,0,162,0,-2,197,0,0,163,0,-2,198,0,13,164,0,0,165,0,0,165,0,0,166,0,0,166,0,0,167,0,0,167,0,0,168,0,0,168,0,0,169,0,0,169,0,0,170,0,0,171,0,-1,173,0,57,37,1,2,37,4,2,41,14,2,58,15,2,65,24,2,61,27,2,41,34,2,56,38,26,59,38,27,66,38,28,64,38,33,45,38,58,182,38,59,59,38,23,183,39,17,40,40,29,74,40,30,72,40,23,71,40,31,70,40,32,67,44,2,78,49,2,73,50,2,73,59,0,92,64,19,175,64,20,174,66,0,91,67,19,177,67,20,176,70,19,179,70,20,178,71,0,104,72,43,181,74,43,180,75,0,133,192,60,193,649],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,67,70,180,74,181,72,191],[24,24,24,1,3,5,6,7,1,3,5,6,7,1,1,3,5,6,7,14,1,3,5,6,7,1,3,5,6,7,14,1,3,5,6,7,1,3,5,6,7,1,1,1,3,5,6,7,14,1,3,5,6,7,1,3,5,6,7,1,1,1,1,1,14,1,3,5,6,7,1,3,5,6,7,1,1,3,5,6,7,1,3,5,6,7,1,3,5,6,7,14,1,3,5,6,7,1,3,5,6,7,1,1,3,5,6,7,14,1,3,5,6,7,1,1,3,5,6,7,1,3,5,6,7,1,3,5,6,7,1,3,5,6,7,1,21,1,21,14,1,3,5,6,7,1,3,5,6,7,1,3,5,6,7,1,1,3,5,6,7,14,1,3,5,6,7,1,3,5,6,7,1,1,24,61,1,62,63,21,21,21,1,3,1,3,1],[26,27,28,0,0,0,1,2,0,0,0,1,2,8,0,0,0,1,2,10,4,4,0,1,2,0,0,0,1,2,10,4,4,0,1,2,0,0,0,1,2,9,8,0,0,0,1,2,10,4,4,0,1,2,0,0,0,1,2,8,12,12,9,9,10,4,4,0,1,2,0,0,0,1,2,9,0,0,0,1,2,0,0,0,1,2,0,0,0,1,2,10,4,4,0,1,2,0,0,0,1,2,9,0,0,0,1,2,10,4,4,0,1,2,9,0,0,0,1,2,0,0,0,1,2,0,0,0,1,2,0,0,0,1,2,8,8,8,8,10,4,4,0,1,2,0,0,0,1,2,0,0,0,1,2,9,0,0,0,1,2,10,4,4,0,1,2,0,0,0,1,2,9,29,16,16,9,17,17,8,8,8,18,12,18,12,30]],[[[41,"soldier",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_OUTLINE_PASS":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true}],[[{},[{},"specular",8,[4,16777215],"mainTexture",6,0],{},{}],0,11,0,0]]],0,0,[0,0],[15,16],[31,13]],[[[41,"shield",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_ALBEDO_MAP":true},{"USE_ALBEDO_MAP":true},{"USE_ALBEDO_MAP":true}],[[[{"alphaThreshold":0,"roughness":0.70710676908493,"metallic":0.400000005960464},"mainTexture",6,0],{},{}],11,0,0]]],0,0,[0,0],[15,16],[32,15]],[[{"name":"default_btn_disabled","rect":{"x":0,"y":0,"width":40,"height":40},"offset":{"x":0,"y":0},"originalSize":{"width":40,"height":40},"rotated":false,"capInsets":[12,12,12,12],"vertices":{"rawPosition":[-20,-20,0,20,-20,0,-20,20,0,20,20,0],"indexes":[0,1,2,2,1,3],"uv":[0,40,40,40,0,0,40,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-20,"y":-20,"z":0},"maxPos":{"x":20,"y":20,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[33]],[[[41,"stone",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_OUTLINE_PASS":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true}],[[{},[{},"specular",8,[4,16777215],"mainTexture",6,0],{},{}],0,11,0,0]]],0,0,[0,0],[15,16],[34,13]],[[[154,"builtin-toon",[{"hash":503443906,"name":"builtin-toon|legacy/main-functions/outline-vs:vert|legacy/main-functions/outline-fs:frag","blocks":[{"name":"OutlineVert","stageFlags":1,"binding":0,"members":[{"name":"outlineParams","type":16,"count":1}],"defines":[]},{"name":"OutlineFrag","stageFlags":16,"binding":1,"members":[{"name":"baseColor","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"baseColorMap","type":28,"count":1,"stageFlags":16,"binding":2,"defines":["USE_BASE_COLOR_MAP"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[],"attributes":[{"name":"a_position","format":32,"location":0,"defines":[]},{"name":"a_normal","format":32,"location":1,"defines":[]},{"name":"a_texCoord","format":21,"location":2,"defines":[]},{"name":"a_tangent","format":44,"location":3,"defines":[]},{"name":"a_joints","location":4,"defines":["CC_USE_SKINNING"]},{"name":"a_weights","format":44,"location":5,"defines":["CC_USE_SKINNING"]},{"name":"a_jointAnimInfo","format":44,"isInstanced":true,"location":6,"defines":["USE_INSTANCING","CC_USE_BAKED_ANIMATION"]},{"name":"a_matWorld0","format":44,"isInstanced":true,"location":7,"defines":["USE_INSTANCING"]},{"name":"a_matWorld1","format":44,"isInstanced":true,"location":8,"defines":["USE_INSTANCING"]},{"name":"a_matWorld2","format":44,"isInstanced":true,"location":9,"defines":["USE_INSTANCING"]},{"name":"a_lightingMapUVParam","format":44,"isInstanced":true,"location":10,"defines":["USE_INSTANCING","CC_USE_LIGHTMAP"]},{"name":"a_localShadowBias","format":21,"isInstanced":true,"location":11,"defines":["USE_INSTANCING","CC_RECEIVE_SHADOW"]},{"name":"a_dyn_batch_id","format":11,"location":12,"defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"a_vertexId","format":11,"location":13,"defines":["CC_USE_MORPH"]}],"fragColors":[{"name":"cc_FragColor","typename":"vec4","type":16,"count":1,"stageFlags":16,"location":0,"defines":[]}],"glsl3":{"vert":"\nprecision highp float;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nhighp float decode32 (highp vec4 rgba) {\n rgba = rgba * 255.0;\n highp float Sign = 1.0 - (step(128.0, (rgba[3]) + 0.5)) * 2.0;\n highp float Exponent = 2.0 * (mod(float(int((rgba[3]) + 0.5)), 128.0)) + (step(128.0, (rgba[2]) + 0.5)) - 127.0;\n highp float Mantissa = (mod(float(int((rgba[2]) + 0.5)), 128.0)) * 65536.0 + rgba[1] * 256.0 + rgba[0] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n}\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nin vec3 a_position;\nin vec3 a_normal;\nin vec2 a_texCoord;\nin vec4 a_tangent;\n#if CC_USE_SKINNING\n in vec4 a_joints;\n in vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n in highp vec4 a_jointAnimInfo;\n #endif\n in vec4 a_matWorld0;\n in vec4 a_matWorld1;\n in vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n in vec4 a_lightingMapUVParam;\n #endif\n #if CC_RECEIVE_SHADOW\n in vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n in float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n in float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\n#if CC_USE_MORPH\n layout(std140) uniform CCMorph {\n vec4 cc_displacementWeights[15];\n vec4 cc_displacementTextureInfo;\n };\n #if CC_MORPH_TARGET_HAS_POSITION\n uniform sampler2D cc_PositionDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n uniform sampler2D cc_NormalDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n uniform sampler2D cc_TangentDisplacements;\n #endif\n vec2 getPixelLocation(vec2 textureResolution, int pixelIndex) {\n float pixelIndexF = float(pixelIndex);\n float x = mod(pixelIndexF, textureResolution.x);\n float y = floor(pixelIndexF / textureResolution.x);\n return vec2(x, y);\n }\n vec2 getPixelCoordFromLocation(vec2 location, vec2 textureResolution) {\n return (vec2(location.x, location.y) + .5) / textureResolution;\n }\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int pixelIndex) {\n ivec2 texSize = textureSize(tex, 0);\n return texelFetch(tex, ivec2(pixelIndex % texSize.x, pixelIndex / texSize.x), 0);\n }\n #else\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n int pixelIndex = elementIndex * 4;\n vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n vec2 x = getPixelCoordFromLocation(location + vec2(0.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 y = getPixelCoordFromLocation(location + vec2(1.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 z = getPixelCoordFromLocation(location + vec2(2.0, 0.0), cc_displacementTextureInfo.xy);\n return vec4(\n decode32(texture(tex, x)),\n decode32(texture(tex, y)),\n decode32(texture(tex, z)),\n 1.0\n );\n }\n #endif\n float getDisplacementWeight(int index) {\n int quot = index / 4;\n int remainder = index - quot * 4;\n if (remainder == 0) {\n return cc_displacementWeights[quot].x;\n } else if (remainder == 1) {\n return cc_displacementWeights[quot].y;\n } else if (remainder == 2) {\n return cc_displacementWeights[quot].z;\n } else {\n return cc_displacementWeights[quot].w;\n }\n }\n vec3 getVec3DisplacementFromTexture(sampler2D tex, int vertexIndex) {\n #if CC_MORPH_PRECOMPUTED\n return fetchVec3ArrayFromTexture(tex, vertexIndex).rgb;\n #else\n vec3 result = vec3(0, 0, 0);\n int nVertices = int(cc_displacementTextureInfo.z);\n for (int iTarget = 0; iTarget < CC_MORPH_TARGET_COUNT; ++iTarget) {\n result += (fetchVec3ArrayFromTexture(tex, nVertices * iTarget + vertexIndex).rgb * getDisplacementWeight(iTarget));\n }\n return result;\n #endif\n }\n #if CC_MORPH_TARGET_HAS_POSITION\n vec3 getPositionDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_PositionDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n vec3 getNormalDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_NormalDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n vec3 getTangentDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_TangentDisplacements, vertexId);\n }\n #endif\n void applyMorph (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n int vertexId = getVertexId();\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n normal.xyz = normal.xyz + getNormalDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n tangent.xyz = tangent.xyz + getTangentDisplacement(vertexId);\n #endif\n }\n void applyMorph (inout vec4 position) {\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(getVertexId());\n #endif\n }\n#endif\n#if CC_USE_SKINNING\n #if CC_USE_BAKED_ANIMATION\n layout(std140) uniform CCSkinningTexture {\n highp vec4 cc_jointTextureInfo;\n };\n layout(std140) uniform CCSkinningAnimation {\n highp vec4 cc_jointAnimInfo;\n };\n uniform highp sampler2D cc_jointTexture;\n void CCGetJointTextureCoords(float pixelsPerJoint, float jointIdx, out highp float x, out highp float y, out highp float invSize)\n {\n #if USE_INSTANCING\n highp float temp = pixelsPerJoint * (a_jointAnimInfo.x * a_jointAnimInfo.y + jointIdx) + a_jointAnimInfo.z;\n #else\n highp float temp = pixelsPerJoint * (cc_jointAnimInfo.x * cc_jointTextureInfo.y + jointIdx) + cc_jointTextureInfo.z;\n #endif\n invSize = cc_jointTextureInfo.w;\n highp float tempY = floor(temp * invSize);\n x = floor(temp - tempY * cc_jointTextureInfo.x);\n y = (tempY + 0.5) * invSize;\n }\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n uniform highp sampler2D cc_realtimeJoint;\n #else\n layout(std140) uniform CCSkinning {\n highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n };\n #endif\n #endif\n #if CC_USE_BAKED_ANIMATION\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(3.0, i, x, y, invSize);\n vec4 v1 = texture(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n vec4 v2 = texture(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n vec4 v3 = texture(cc_jointTexture, vec2((x + 2.5) * invSize, y));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(12.0, i, x, y, invSize);\n vec4 v1 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 11.5) * invSize, y)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n float x = i;\n vec4 v1 = texture(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n vec4 v2 = texture(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n vec4 v3 = texture(cc_realtimeJoint, vec2( x / 256.0, 2.5 / 3.0));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n float x = 4.0 * i;\n vec4 v1 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 2.5 / 3.0)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n mat4 getJointMatrix (float i) {\n int idx = int(i);\n vec4 v1 = cc_joints[idx * 3];\n vec4 v2 = cc_joints[idx * 3 + 1];\n vec4 v3 = cc_joints[idx * 3 + 2];\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #endif\n mat4 skinMatrix () {\n vec4 joints = vec4(a_joints);\n return getJointMatrix(joints.x) * a_weights.x\n + getJointMatrix(joints.y) * a_weights.y\n + getJointMatrix(joints.z) * a_weights.z\n + getJointMatrix(joints.w) * a_weights.w;\n }\n void CCSkin (inout vec4 position) {\n mat4 m = skinMatrix();\n position = m * position;\n }\n void CCSkin (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n mat4 m = skinMatrix();\n position = m * position;\n normal = (m * vec4(normal, 0.0)).xyz;\n tangent.xyz = (m * vec4(tangent.xyz, 0.0)).xyz;\n }\n#endif\nvoid CCVertInput(inout StandardVertInput In)\n{\n In.position = vec4(a_position, 1.0);\n In.normal = a_normal;\n In.tangent = a_tangent;\n #if CC_USE_MORPH\n applyMorph(In.position, In.normal, In.tangent);\n #endif\n #if CC_USE_SKINNING\n CCSkin(In.position, In.normal, In.tangent);\n #endif\n}\nlayout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n};\nlayout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\n#if !USE_INSTANCING\n #if USE_BATCHING\n layout(std140) uniform CCLocalBatched {\n highp mat4 cc_matWorlds[10];\n };\n #else\n layout(std140) uniform CCLocal {\n highp mat4 cc_matWorld;\n highp mat4 cc_matWorldIT;\n highp vec4 cc_lightingMapUVParam;\n highp vec4 cc_localShadowBias;\n };\n #endif\n#endif\nvoid CCGetWorldMatrix(out mat4 matWorld)\n{\n #if USE_INSTANCING\n matWorld = mat4(\n vec4(a_matWorld0.xyz, 0.0),\n vec4(a_matWorld1.xyz, 0.0),\n vec4(a_matWorld2.xyz, 0.0),\n vec4(a_matWorld0.w, a_matWorld1.w, a_matWorld2.w, 1.0)\n );\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n #else\n matWorld = cc_matWorld;\n #endif\n}\nout vec2 v_uv;\nlayout(std140) uniform OutlineVert {\n vec4 outlineParams;\n};\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld;\n CCGetWorldMatrix(matWorld);\n float width = outlineParams.x * 0.001;\n #if USE_POSITION_SCALING\n vec3 dir = normalize(In.position.xyz);\n float flip = dot(dir, normalize(In.normal)) < 0.0 ? -1.0 : 1.0;\n In.position.xyz += flip * dir * width * 2.0;\n vec4 pos = cc_matProj * (cc_matView * matWorld) * In.position;\n #else\n In.position.xyz += normalize(In.normal) * width;\n vec4 pos = cc_matProj * (cc_matView * matWorld) * In.position;\n #endif\n pos.z -= outlineParams.y * 0.002;\n v_uv = a_texCoord;\n return pos;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nlayout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n};\nlayout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_WORLD_POS CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR CC_SURFACES_DEBUG_VIEW_WORLD_POS + 1\n#define CC_SURFACES_DEBUG_VIEW_FACE_SIDE CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR + 1\n#define CC_SURFACES_DEBUG_VIEW_UV0 CC_SURFACES_DEBUG_VIEW_FACE_SIDE + 1\n#define CC_SURFACES_DEBUG_VIEW_UV1 CC_SURFACES_DEBUG_VIEW_UV0 + 1\n#define CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP CC_SURFACES_DEBUG_VIEW_UV1 + 1\n#define CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP + 1\n#define CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_BASE_COLOR CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR CC_SURFACES_DEBUG_VIEW_BASE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_TRANSPARENCY CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_METALLIC CC_SURFACES_DEBUG_VIEW_TRANSPARENCY + 1\n#define CC_SURFACES_DEBUG_VIEW_ROUGHNESS CC_SURFACES_DEBUG_VIEW_METALLIC + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY CC_SURFACES_DEBUG_VIEW_ROUGHNESS + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_ALL CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE CC_SURFACES_DEBUG_VIEW_DIRECT_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_ALL CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_EMISSIVE CC_SURFACES_DEBUG_VIEW_ENV_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_LIGHT_MAP CC_SURFACES_DEBUG_VIEW_EMISSIVE + 1\n#define CC_SURFACES_DEBUG_VIEW_SHADOW CC_SURFACES_DEBUG_VIEW_LIGHT_MAP + 1\n#define CC_SURFACES_DEBUG_VIEW_AO CC_SURFACES_DEBUG_VIEW_SHADOW + 1\n#define CC_SURFACES_DEBUG_VIEW_FOG CC_SURFACES_DEBUG_VIEW_AO + 1\n#define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#define IS_DEBUG_VIEW_LIGHTING_ENABLE_WITH_ALBEDO (cc_debug_view_mode.y > 0.0)\n#define IS_DEBUG_VIEW_MISC_ENABLE_CSM_LAYER_COLORATION (cc_debug_view_mode.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_DIFFUSE (cc_debug_view_composite_pack_1.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_SPECULAR (cc_debug_view_composite_pack_1.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_DIFFUSE (cc_debug_view_composite_pack_1.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_SPECULAR (cc_debug_view_composite_pack_1.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_EMISSIVE (cc_debug_view_composite_pack_2.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_LIGHT_MAP (cc_debug_view_composite_pack_2.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_SHADOW (cc_debug_view_composite_pack_2.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_AO (cc_debug_view_composite_pack_2.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_NORMAL_MAP (cc_debug_view_composite_pack_3.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_FOG (cc_debug_view_composite_pack_3.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_TONE_MAPPING (cc_debug_view_composite_pack_3.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION (cc_debug_view_composite_pack_3.w > 0.0)\nvec3 SRGBToLinear (vec3 gamma) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return gamma;\n }\n #endif\n#endif\n return gamma * gamma;\n}\nvec4 CCFragOutput (vec4 color) {\n return color;\n}\nin vec2 v_uv;\nlayout(std140) uniform OutlineFrag {\n vec4 baseColor;\n};\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\nvec4 frag () {\n vec4 color = baseColor * cc_mainLitColor;\n #if USE_BASE_COLOR_MAP\n vec4 texColor = texture(baseColorMap, v_uv);\n texColor.rgb = SRGBToLinear(texColor.rgb);\n color *= texColor;\n #endif\n return CCFragOutput(vec4(color.rgb, 1.0));\n}\nlayout(location = 0) out vec4 cc_FragColor;\nvoid main() { cc_FragColor = frag(); }"},"glsl1":{"vert":"\nprecision highp float;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nhighp float decode32 (highp vec4 rgba) {\n rgba = rgba * 255.0;\n highp float Sign = 1.0 - (step(128.0, (rgba[3]) + 0.5)) * 2.0;\n highp float Exponent = 2.0 * (mod(float(int((rgba[3]) + 0.5)), 128.0)) + (step(128.0, (rgba[2]) + 0.5)) - 127.0;\n highp float Mantissa = (mod(float(int((rgba[2]) + 0.5)), 128.0)) * 65536.0 + rgba[1] * 256.0 + rgba[0] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n}\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nattribute vec3 a_position;\nattribute vec3 a_normal;\nattribute vec2 a_texCoord;\nattribute vec4 a_tangent;\n#if CC_USE_SKINNING\n attribute vec4 a_joints;\n attribute vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n attribute highp vec4 a_jointAnimInfo;\n #endif\n attribute vec4 a_matWorld0;\n attribute vec4 a_matWorld1;\n attribute vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n attribute vec4 a_lightingMapUVParam;\n #endif\n #if CC_RECEIVE_SHADOW\n attribute vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n attribute float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n attribute float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\n#if CC_USE_MORPH\n uniform vec4 cc_displacementWeights[15];\n uniform vec4 cc_displacementTextureInfo;\n #if CC_MORPH_TARGET_HAS_POSITION\n uniform sampler2D cc_PositionDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n uniform sampler2D cc_NormalDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n uniform sampler2D cc_TangentDisplacements;\n #endif\n vec2 getPixelLocation(vec2 textureResolution, int pixelIndex) {\n float pixelIndexF = float(pixelIndex);\n float x = mod(pixelIndexF, textureResolution.x);\n float y = floor(pixelIndexF / textureResolution.x);\n return vec2(x, y);\n }\n vec2 getPixelCoordFromLocation(vec2 location, vec2 textureResolution) {\n return (vec2(location.x, location.y) + .5) / textureResolution;\n }\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n int pixelIndex = elementIndex;\n vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n vec2 uv = getPixelCoordFromLocation(location, cc_displacementTextureInfo.xy);\n return texture2D(tex, uv);\n }\n #else\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n int pixelIndex = elementIndex * 4;\n vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n vec2 x = getPixelCoordFromLocation(location + vec2(0.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 y = getPixelCoordFromLocation(location + vec2(1.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 z = getPixelCoordFromLocation(location + vec2(2.0, 0.0), cc_displacementTextureInfo.xy);\n return vec4(\n decode32(texture2D(tex, x)),\n decode32(texture2D(tex, y)),\n decode32(texture2D(tex, z)),\n 1.0\n );\n }\n #endif\n float getDisplacementWeight(int index) {\n int quot = index / 4;\n int remainder = index - quot * 4;\n if (remainder == 0) {\n return cc_displacementWeights[quot].x;\n } else if (remainder == 1) {\n return cc_displacementWeights[quot].y;\n } else if (remainder == 2) {\n return cc_displacementWeights[quot].z;\n } else {\n return cc_displacementWeights[quot].w;\n }\n }\n vec3 getVec3DisplacementFromTexture(sampler2D tex, int vertexIndex) {\n #if CC_MORPH_PRECOMPUTED\n return fetchVec3ArrayFromTexture(tex, vertexIndex).rgb;\n #else\n vec3 result = vec3(0, 0, 0);\n int nVertices = int(cc_displacementTextureInfo.z);\n for (int iTarget = 0; iTarget < CC_MORPH_TARGET_COUNT; ++iTarget) {\n result += (fetchVec3ArrayFromTexture(tex, nVertices * iTarget + vertexIndex).rgb * getDisplacementWeight(iTarget));\n }\n return result;\n #endif\n }\n #if CC_MORPH_TARGET_HAS_POSITION\n vec3 getPositionDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_PositionDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n vec3 getNormalDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_NormalDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n vec3 getTangentDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_TangentDisplacements, vertexId);\n }\n #endif\n void applyMorph (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n int vertexId = getVertexId();\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n normal.xyz = normal.xyz + getNormalDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n tangent.xyz = tangent.xyz + getTangentDisplacement(vertexId);\n #endif\n }\n void applyMorph (inout vec4 position) {\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(getVertexId());\n #endif\n }\n#endif\n#if CC_USE_SKINNING\n #if CC_USE_BAKED_ANIMATION\n uniform highp vec4 cc_jointTextureInfo;\n uniform highp vec4 cc_jointAnimInfo;\n uniform highp sampler2D cc_jointTexture;\n void CCGetJointTextureCoords(float pixelsPerJoint, float jointIdx, out highp float x, out highp float y, out highp float invSize)\n {\n #if USE_INSTANCING\n highp float temp = pixelsPerJoint * (a_jointAnimInfo.x * a_jointAnimInfo.y + jointIdx) + a_jointAnimInfo.z;\n #else\n highp float temp = pixelsPerJoint * (cc_jointAnimInfo.x * cc_jointTextureInfo.y + jointIdx) + cc_jointTextureInfo.z;\n #endif\n invSize = cc_jointTextureInfo.w;\n highp float tempY = floor(temp * invSize);\n x = floor(temp - tempY * cc_jointTextureInfo.x);\n y = (tempY + 0.5) * invSize;\n }\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n uniform highp sampler2D cc_realtimeJoint;\n #else\n uniform highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n #endif\n #endif\n #if CC_USE_BAKED_ANIMATION\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(3.0, i, x, y, invSize);\n vec4 v1 = texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n vec4 v2 = texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n vec4 v3 = texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(12.0, i, x, y, invSize);\n vec4 v1 = vec4(\n decode32(texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n );\n vec4 v2 = vec4(\n decode32(texture2D(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n );\n vec4 v3 = vec4(\n decode32(texture2D(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 11.5) * invSize, y)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n float x = i;\n vec4 v1 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n vec4 v2 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n vec4 v3 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 2.5 / 3.0));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n float x = 4.0 * i;\n vec4 v1 = vec4(\n decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n );\n vec4 v2 = vec4(\n decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n );\n vec4 v3 = vec4(\n decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 2.5 / 3.0)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n mat4 getJointMatrix (float i) {\n int idx = int(i);\n vec4 v1 = cc_joints[idx * 3];\n vec4 v2 = cc_joints[idx * 3 + 1];\n vec4 v3 = cc_joints[idx * 3 + 2];\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #endif\n mat4 skinMatrix () {\n vec4 joints = vec4(a_joints);\n return getJointMatrix(joints.x) * a_weights.x\n + getJointMatrix(joints.y) * a_weights.y\n + getJointMatrix(joints.z) * a_weights.z\n + getJointMatrix(joints.w) * a_weights.w;\n }\n void CCSkin (inout vec4 position) {\n mat4 m = skinMatrix();\n position = m * position;\n }\n void CCSkin (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n mat4 m = skinMatrix();\n position = m * position;\n normal = (m * vec4(normal, 0.0)).xyz;\n tangent.xyz = (m * vec4(tangent.xyz, 0.0)).xyz;\n }\n#endif\nvoid CCVertInput(inout StandardVertInput In)\n{\n In.position = vec4(a_position, 1.0);\n In.normal = a_normal;\n In.tangent = a_tangent;\n #if CC_USE_MORPH\n applyMorph(In.position, In.normal, In.tangent);\n #endif\n #if CC_USE_SKINNING\n CCSkin(In.position, In.normal, In.tangent);\n #endif\n}\nuniform highp mat4 cc_matView;\n uniform highp mat4 cc_matProj;\n#if !USE_INSTANCING\n #if USE_BATCHING\n uniform highp mat4 cc_matWorlds[10];\n #else\n uniform highp mat4 cc_matWorld;\n #endif\n#endif\nvoid CCGetWorldMatrix(out mat4 matWorld)\n{\n #if USE_INSTANCING\n matWorld = mat4(\n vec4(a_matWorld0.xyz, 0.0),\n vec4(a_matWorld1.xyz, 0.0),\n vec4(a_matWorld2.xyz, 0.0),\n vec4(a_matWorld0.w, a_matWorld1.w, a_matWorld2.w, 1.0)\n );\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n #else\n matWorld = cc_matWorld;\n #endif\n}\nvarying vec2 v_uv;\n uniform vec4 outlineParams;\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld;\n CCGetWorldMatrix(matWorld);\n float width = outlineParams.x * 0.001;\n #if USE_POSITION_SCALING\n vec3 dir = normalize(In.position.xyz);\n float flip = dot(dir, normalize(In.normal)) < 0.0 ? -1.0 : 1.0;\n In.position.xyz += flip * dir * width * 2.0;\n vec4 pos = cc_matProj * (cc_matView * matWorld) * In.position;\n #else\n In.position.xyz += normalize(In.normal) * width;\n vec4 pos = cc_matProj * (cc_matView * matWorld) * In.position;\n #endif\n pos.z -= outlineParams.y * 0.002;\n v_uv = a_texCoord;\n return pos;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nuniform mediump vec4 cc_debug_view_mode;\n uniform mediump vec4 cc_debug_view_composite_pack_1;\n uniform mediump vec4 cc_debug_view_composite_pack_2;\n uniform mediump vec4 cc_debug_view_composite_pack_3;\nuniform mediump vec4 cc_mainLitColor;\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_WORLD_POS CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR CC_SURFACES_DEBUG_VIEW_WORLD_POS + 1\n#define CC_SURFACES_DEBUG_VIEW_FACE_SIDE CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR + 1\n#define CC_SURFACES_DEBUG_VIEW_UV0 CC_SURFACES_DEBUG_VIEW_FACE_SIDE + 1\n#define CC_SURFACES_DEBUG_VIEW_UV1 CC_SURFACES_DEBUG_VIEW_UV0 + 1\n#define CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP CC_SURFACES_DEBUG_VIEW_UV1 + 1\n#define CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP + 1\n#define CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_BASE_COLOR CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR CC_SURFACES_DEBUG_VIEW_BASE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_TRANSPARENCY CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_METALLIC CC_SURFACES_DEBUG_VIEW_TRANSPARENCY + 1\n#define CC_SURFACES_DEBUG_VIEW_ROUGHNESS CC_SURFACES_DEBUG_VIEW_METALLIC + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY CC_SURFACES_DEBUG_VIEW_ROUGHNESS + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_ALL CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE CC_SURFACES_DEBUG_VIEW_DIRECT_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_ALL CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_EMISSIVE CC_SURFACES_DEBUG_VIEW_ENV_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_LIGHT_MAP CC_SURFACES_DEBUG_VIEW_EMISSIVE + 1\n#define CC_SURFACES_DEBUG_VIEW_SHADOW CC_SURFACES_DEBUG_VIEW_LIGHT_MAP + 1\n#define CC_SURFACES_DEBUG_VIEW_AO CC_SURFACES_DEBUG_VIEW_SHADOW + 1\n#define CC_SURFACES_DEBUG_VIEW_FOG CC_SURFACES_DEBUG_VIEW_AO + 1\n#define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#define IS_DEBUG_VIEW_LIGHTING_ENABLE_WITH_ALBEDO (cc_debug_view_mode.y > 0.0)\n#define IS_DEBUG_VIEW_MISC_ENABLE_CSM_LAYER_COLORATION (cc_debug_view_mode.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_DIFFUSE (cc_debug_view_composite_pack_1.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_SPECULAR (cc_debug_view_composite_pack_1.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_DIFFUSE (cc_debug_view_composite_pack_1.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_SPECULAR (cc_debug_view_composite_pack_1.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_EMISSIVE (cc_debug_view_composite_pack_2.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_LIGHT_MAP (cc_debug_view_composite_pack_2.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_SHADOW (cc_debug_view_composite_pack_2.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_AO (cc_debug_view_composite_pack_2.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_NORMAL_MAP (cc_debug_view_composite_pack_3.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_FOG (cc_debug_view_composite_pack_3.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_TONE_MAPPING (cc_debug_view_composite_pack_3.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION (cc_debug_view_composite_pack_3.w > 0.0)\nvec3 SRGBToLinear (vec3 gamma) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return gamma;\n }\n #endif\n#endif\n return gamma * gamma;\n}\nvec4 CCFragOutput (vec4 color) {\n return color;\n}\nvarying vec2 v_uv;\n uniform vec4 baseColor;\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\nvec4 frag () {\n vec4 color = baseColor * cc_mainLitColor;\n #if USE_BASE_COLOR_MAP\n vec4 texColor = texture2D(baseColorMap, v_uv);\n texColor.rgb = SRGBToLinear(texColor.rgb);\n color *= texColor;\n #endif\n return CCFragOutput(vec4(color.rgb, 1.0));\n}\nvoid main() { gl_FragColor = frag(); }"},"builtins":{"globals":{"blocks":[{"name":"CCGlobal","defines":[]},{"name":"CCCamera","defines":[]}],"samplerTextures":[],"buffers":[],"images":[]},"locals":{"blocks":[{"name":"CCMorph","defines":["CC_USE_MORPH"]},{"name":"CCSkinningTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinningAnimation","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinning","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","!CC_USE_REAL_TIME_JOINT_TEXTURE"]},{"name":"CCLocalBatched","defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"CCLocal","defines":["!USE_INSTANCING","!USE_BATCHING"]}],"samplerTextures":[{"name":"cc_PositionDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_POSITION"]},{"name":"cc_NormalDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_NORMAL"]},{"name":"cc_TangentDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_TANGENT"]},{"name":"cc_jointTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"cc_realtimeJoint","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","CC_USE_REAL_TIME_JOINT_TEXTURE"]}],"buffers":[],"images":[]},"statistics":{"CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS":113,"CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS":45}},"defines":[{"name":"USE_INSTANCING","type":"boolean"},{"name":"USE_BATCHING","type":"boolean"},{"name":"CC_USE_SKINNING","type":"boolean"},{"name":"CC_USE_BAKED_ANIMATION","type":"boolean"},{"name":"CC_USE_LIGHTMAP","type":"boolean"},{"name":"CC_RECEIVE_SHADOW","type":"boolean"},{"name":"CC_USE_MORPH","type":"boolean"},{"name":"CC_MORPH_TARGET_COUNT","type":"number","range":[2,8]},{"name":"CC_MORPH_TARGET_HAS_POSITION","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_NORMAL","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_TANGENT","type":"boolean"},{"name":"CC_MORPH_PRECOMPUTED","type":"boolean"},{"name":"CC_USE_REAL_TIME_JOINT_TEXTURE","type":"boolean"},{"name":"USE_POSITION_SCALING","type":"boolean"},{"name":"CC_USE_DEBUG_VIEW","type":"number","range":[0,3]},{"name":"USE_BASE_COLOR_MAP","type":"boolean"}]},{"hash":1315592135,"name":"builtin-toon|toon-vs:vert|toon-fs:frag","blocks":[{"name":"Constants","stageFlags":17,"binding":0,"members":[{"name":"tilingOffset","type":16,"count":1},{"name":"baseColor","type":16,"count":1},{"name":"colorScaleAndCutoff","type":16,"count":1},{"name":"shadeColor1","type":16,"count":1},{"name":"shadeColor2","type":16,"count":1},{"name":"specular","type":16,"count":1},{"name":"shadeParams","type":16,"count":1},{"name":"miscParams","type":16,"count":1},{"name":"emissive","type":16,"count":1},{"name":"emissiveScaleAndStrenth","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"baseColorMap","type":28,"count":1,"stageFlags":16,"binding":1,"defines":["USE_BASE_COLOR_MAP"]},{"name":"normalMap","type":28,"count":1,"stageFlags":16,"binding":2,"defines":["USE_NORMAL_MAP"]},{"name":"shadeMap1","type":28,"count":1,"stageFlags":16,"binding":3,"defines":["USE_1ST_SHADE_MAP"]},{"name":"shadeMap2","type":28,"count":1,"stageFlags":16,"binding":4,"defines":["USE_2ND_SHADE_MAP"]},{"name":"specularMap","type":28,"count":1,"stageFlags":16,"binding":5,"defines":["USE_SPECULAR_MAP"]},{"name":"emissiveMap","type":28,"count":1,"stageFlags":16,"binding":6,"defines":["USE_EMISSIVE_MAP"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[],"attributes":[{"name":"a_position","format":32,"location":0,"defines":[]},{"name":"a_normal","format":32,"location":1,"defines":[]},{"name":"a_texCoord","format":21,"location":2,"defines":[]},{"name":"a_tangent","format":44,"location":3,"defines":[]},{"name":"a_joints","location":4,"defines":["CC_USE_SKINNING"]},{"name":"a_weights","format":44,"location":5,"defines":["CC_USE_SKINNING"]},{"name":"a_jointAnimInfo","format":44,"isInstanced":true,"location":6,"defines":["USE_INSTANCING","CC_USE_BAKED_ANIMATION"]},{"name":"a_matWorld0","format":44,"isInstanced":true,"location":7,"defines":["USE_INSTANCING"]},{"name":"a_matWorld1","format":44,"isInstanced":true,"location":8,"defines":["USE_INSTANCING"]},{"name":"a_matWorld2","format":44,"isInstanced":true,"location":9,"defines":["USE_INSTANCING"]},{"name":"a_lightingMapUVParam","format":44,"isInstanced":true,"location":10,"defines":["USE_INSTANCING","CC_USE_LIGHTMAP"]},{"name":"a_localShadowBias","format":21,"isInstanced":true,"location":11,"defines":["USE_INSTANCING","CC_RECEIVE_SHADOW"]},{"name":"a_dyn_batch_id","format":11,"location":12,"defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"a_vertexId","format":11,"location":13,"defines":["CC_USE_MORPH"]}],"fragColors":[{"name":"cc_FragColor","typename":"vec4","type":16,"count":1,"stageFlags":16,"location":0,"defines":[]}],"glsl3":{"vert":"\nprecision highp float;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nhighp float decode32 (highp vec4 rgba) {\n rgba = rgba * 255.0;\n highp float Sign = 1.0 - (step(128.0, (rgba[3]) + 0.5)) * 2.0;\n highp float Exponent = 2.0 * (mod(float(int((rgba[3]) + 0.5)), 128.0)) + (step(128.0, (rgba[2]) + 0.5)) - 127.0;\n highp float Mantissa = (mod(float(int((rgba[2]) + 0.5)), 128.0)) * 65536.0 + rgba[1] * 256.0 + rgba[0] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n}\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nin vec3 a_position;\nin vec3 a_normal;\nin vec2 a_texCoord;\nin vec4 a_tangent;\n#if CC_USE_SKINNING\n in vec4 a_joints;\n in vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n in highp vec4 a_jointAnimInfo;\n #endif\n in vec4 a_matWorld0;\n in vec4 a_matWorld1;\n in vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n in vec4 a_lightingMapUVParam;\n #endif\n #if CC_RECEIVE_SHADOW\n in vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n in float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n in float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\n#if CC_USE_MORPH\n layout(std140) uniform CCMorph {\n vec4 cc_displacementWeights[15];\n vec4 cc_displacementTextureInfo;\n };\n #if CC_MORPH_TARGET_HAS_POSITION\n uniform sampler2D cc_PositionDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n uniform sampler2D cc_NormalDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n uniform sampler2D cc_TangentDisplacements;\n #endif\n vec2 getPixelLocation(vec2 textureResolution, int pixelIndex) {\n float pixelIndexF = float(pixelIndex);\n float x = mod(pixelIndexF, textureResolution.x);\n float y = floor(pixelIndexF / textureResolution.x);\n return vec2(x, y);\n }\n vec2 getPixelCoordFromLocation(vec2 location, vec2 textureResolution) {\n return (vec2(location.x, location.y) + .5) / textureResolution;\n }\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int pixelIndex) {\n ivec2 texSize = textureSize(tex, 0);\n return texelFetch(tex, ivec2(pixelIndex % texSize.x, pixelIndex / texSize.x), 0);\n }\n #else\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n int pixelIndex = elementIndex * 4;\n vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n vec2 x = getPixelCoordFromLocation(location + vec2(0.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 y = getPixelCoordFromLocation(location + vec2(1.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 z = getPixelCoordFromLocation(location + vec2(2.0, 0.0), cc_displacementTextureInfo.xy);\n return vec4(\n decode32(texture(tex, x)),\n decode32(texture(tex, y)),\n decode32(texture(tex, z)),\n 1.0\n );\n }\n #endif\n float getDisplacementWeight(int index) {\n int quot = index / 4;\n int remainder = index - quot * 4;\n if (remainder == 0) {\n return cc_displacementWeights[quot].x;\n } else if (remainder == 1) {\n return cc_displacementWeights[quot].y;\n } else if (remainder == 2) {\n return cc_displacementWeights[quot].z;\n } else {\n return cc_displacementWeights[quot].w;\n }\n }\n vec3 getVec3DisplacementFromTexture(sampler2D tex, int vertexIndex) {\n #if CC_MORPH_PRECOMPUTED\n return fetchVec3ArrayFromTexture(tex, vertexIndex).rgb;\n #else\n vec3 result = vec3(0, 0, 0);\n int nVertices = int(cc_displacementTextureInfo.z);\n for (int iTarget = 0; iTarget < CC_MORPH_TARGET_COUNT; ++iTarget) {\n result += (fetchVec3ArrayFromTexture(tex, nVertices * iTarget + vertexIndex).rgb * getDisplacementWeight(iTarget));\n }\n return result;\n #endif\n }\n #if CC_MORPH_TARGET_HAS_POSITION\n vec3 getPositionDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_PositionDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n vec3 getNormalDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_NormalDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n vec3 getTangentDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_TangentDisplacements, vertexId);\n }\n #endif\n void applyMorph (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n int vertexId = getVertexId();\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n normal.xyz = normal.xyz + getNormalDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n tangent.xyz = tangent.xyz + getTangentDisplacement(vertexId);\n #endif\n }\n void applyMorph (inout vec4 position) {\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(getVertexId());\n #endif\n }\n#endif\n#if CC_USE_SKINNING\n #if CC_USE_BAKED_ANIMATION\n layout(std140) uniform CCSkinningTexture {\n highp vec4 cc_jointTextureInfo;\n };\n layout(std140) uniform CCSkinningAnimation {\n highp vec4 cc_jointAnimInfo;\n };\n uniform highp sampler2D cc_jointTexture;\n void CCGetJointTextureCoords(float pixelsPerJoint, float jointIdx, out highp float x, out highp float y, out highp float invSize)\n {\n #if USE_INSTANCING\n highp float temp = pixelsPerJoint * (a_jointAnimInfo.x * a_jointAnimInfo.y + jointIdx) + a_jointAnimInfo.z;\n #else\n highp float temp = pixelsPerJoint * (cc_jointAnimInfo.x * cc_jointTextureInfo.y + jointIdx) + cc_jointTextureInfo.z;\n #endif\n invSize = cc_jointTextureInfo.w;\n highp float tempY = floor(temp * invSize);\n x = floor(temp - tempY * cc_jointTextureInfo.x);\n y = (tempY + 0.5) * invSize;\n }\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n uniform highp sampler2D cc_realtimeJoint;\n #else\n layout(std140) uniform CCSkinning {\n highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n };\n #endif\n #endif\n #if CC_USE_BAKED_ANIMATION\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(3.0, i, x, y, invSize);\n vec4 v1 = texture(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n vec4 v2 = texture(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n vec4 v3 = texture(cc_jointTexture, vec2((x + 2.5) * invSize, y));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(12.0, i, x, y, invSize);\n vec4 v1 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 11.5) * invSize, y)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n float x = i;\n vec4 v1 = texture(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n vec4 v2 = texture(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n vec4 v3 = texture(cc_realtimeJoint, vec2( x / 256.0, 2.5 / 3.0));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n float x = 4.0 * i;\n vec4 v1 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 2.5 / 3.0)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n mat4 getJointMatrix (float i) {\n int idx = int(i);\n vec4 v1 = cc_joints[idx * 3];\n vec4 v2 = cc_joints[idx * 3 + 1];\n vec4 v3 = cc_joints[idx * 3 + 2];\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #endif\n mat4 skinMatrix () {\n vec4 joints = vec4(a_joints);\n return getJointMatrix(joints.x) * a_weights.x\n + getJointMatrix(joints.y) * a_weights.y\n + getJointMatrix(joints.z) * a_weights.z\n + getJointMatrix(joints.w) * a_weights.w;\n }\n void CCSkin (inout vec4 position) {\n mat4 m = skinMatrix();\n position = m * position;\n }\n void CCSkin (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n mat4 m = skinMatrix();\n position = m * position;\n normal = (m * vec4(normal, 0.0)).xyz;\n tangent.xyz = (m * vec4(tangent.xyz, 0.0)).xyz;\n }\n#endif\nvoid CCVertInput(inout StandardVertInput In)\n{\n In.position = vec4(a_position, 1.0);\n In.normal = a_normal;\n In.tangent = a_tangent;\n #if CC_USE_MORPH\n applyMorph(In.position, In.normal, In.tangent);\n #endif\n #if CC_USE_SKINNING\n CCSkin(In.position, In.normal, In.tangent);\n #endif\n}\nlayout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n};\nlayout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\n#if !USE_INSTANCING\n #if USE_BATCHING\n layout(std140) uniform CCLocalBatched {\n highp mat4 cc_matWorlds[10];\n };\n #else\n layout(std140) uniform CCLocal {\n highp mat4 cc_matWorld;\n highp mat4 cc_matWorldIT;\n highp vec4 cc_lightingMapUVParam;\n highp vec4 cc_localShadowBias;\n };\n #endif\n#endif\nvoid CCGetWorldMatrixFull(out mat4 matWorld, out mat4 matWorldIT)\n{\n #if USE_INSTANCING\n matWorld = mat4(\n vec4(a_matWorld0.xyz, 0.0),\n vec4(a_matWorld1.xyz, 0.0),\n vec4(a_matWorld2.xyz, 0.0),\n vec4(a_matWorld0.w, a_matWorld1.w, a_matWorld2.w, 1.0)\n );\n matWorldIT = matWorld;\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n matWorldIT = matWorld;\n #else\n matWorld = cc_matWorld;\n matWorldIT = cc_matWorldIT;\n #endif\n}\nlayout(std140) uniform Constants {\n vec4 tilingOffset;\n vec4 baseColor;\n vec4 colorScaleAndCutoff;\n vec4 shadeColor1;\n vec4 shadeColor2;\n vec4 specular;\n vec4 shadeParams;\n vec4 miscParams;\n vec4 emissive;\n vec4 emissiveScaleAndStrenth;\n};\nout highp vec4 v_shadowPos;\nlayout(std140) uniform CCShadow {\n highp mat4 cc_matLightView;\n highp mat4 cc_matLightViewProj;\n highp vec4 cc_shadowInvProjDepthInfo;\n highp vec4 cc_shadowProjDepthInfo;\n highp vec4 cc_shadowProjInfo;\n mediump vec4 cc_shadowNFLSInfo;\n mediump vec4 cc_shadowWHPBInfo;\n mediump vec4 cc_shadowLPNNInfo;\n lowp vec4 cc_shadowColor;\n mediump vec4 cc_planarNDInfo;\n};\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n layout(std140) uniform CCCSM {\n highp vec4 cc_csmViewDir0[4];\n highp vec4 cc_csmViewDir1[4];\n highp vec4 cc_csmViewDir2[4];\n highp vec4 cc_csmAtlas[4];\n highp mat4 cc_matCSMViewProj[4];\n highp vec4 cc_csmProjDepthInfo[4];\n highp vec4 cc_csmProjInfo[4];\n highp vec4 cc_csmSplitsInfo;\n };\n#endif\n#if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n #else\n #endif\n#endif\n#if CC_RECEIVE_SHADOW\nvec2 CCGetShadowBias()\n{\n #if USE_INSTANCING\n return vec2(a_localShadowBias.x + cc_shadowWHPBInfo.w, a_localShadowBias.y + cc_shadowLPNNInfo.z);\n #elif !USE_BATCHING\n return vec2(cc_localShadowBias.x + cc_shadowWHPBInfo.w, cc_localShadowBias.y + cc_shadowLPNNInfo.z);\n #else\n return vec2(cc_shadowWHPBInfo.w, cc_shadowLPNNInfo.z);\n #endif\n}\n#endif\nout vec3 v_position;\nout vec2 v_uv;\nout mediump vec3 v_normal;\n#if CC_RECEIVE_SHADOW\n out mediump vec2 v_shadowBias;\n#endif\n#if USE_NORMAL_MAP\n out mediump vec4 v_tangent;\n#endif\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld, matWorldIT;\n CCGetWorldMatrixFull(matWorld, matWorldIT);\n vec4 pos = matWorld * In.position;\n v_position = pos.xyz;\n v_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw;\n #if CC_RECEIVE_SHADOW\n v_shadowBias = CCGetShadowBias();\n #endif\n v_normal = (matWorldIT * vec4(In.normal, 0.0)).xyz;\n #if USE_NORMAL_MAP\n v_tangent.xyz = normalize((matWorld * vec4(In.tangent.xyz, 0.0)).xyz);\n v_tangent.w = In.tangent.w;\n #endif\n v_shadowPos = cc_matLightViewProj * pos;\n return cc_matProj * (cc_matView * matWorld) * In.position;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nlayout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n};\nlayout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nhighp float unpackHighpData (float mainPart, float modPart) {\n highp float data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out float mainPart, out float modPart, highp float data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp float unpackHighpData (float mainPart, float modPart, const float modValue) {\n highp float data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out float mainPart, out float modPart, highp float data, const float modValue) {\n highp float divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec2 unpackHighpData (vec2 mainPart, vec2 modPart) {\n highp vec2 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec2 mainPart, out vec2 modPart, highp vec2 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec2 unpackHighpData (vec2 mainPart, vec2 modPart, const float modValue) {\n highp vec2 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec2 mainPart, out vec2 modPart, highp vec2 data, const float modValue) {\n highp vec2 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec3 unpackHighpData (vec3 mainPart, vec3 modPart) {\n highp vec3 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec3 mainPart, out vec3 modPart, highp vec3 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec3 unpackHighpData (vec3 mainPart, vec3 modPart, const float modValue) {\n highp vec3 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec3 mainPart, out vec3 modPart, highp vec3 data, const float modValue) {\n highp vec3 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec4 unpackHighpData (vec4 mainPart, vec4 modPart) {\n highp vec4 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec4 mainPart, out vec4 modPart, highp vec4 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec4 unpackHighpData (vec4 mainPart, vec4 modPart, const float modValue) {\n highp vec4 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec4 mainPart, out vec4 modPart, highp vec4 data, const float modValue) {\n highp vec4 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nstruct ToonSurface {\n vec4 baseColor;\n vec4 specular;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n vec3 position, position_fract_part;\n #else\n vec3 position;\n #endif\n vec3 normal;\n vec3 shade1;\n vec3 shade2;\n vec3 emissive;\n float baseStep;\n float baseFeather;\n float shadeStep;\n float shadeFeather;\n float shadowCover;\n #if CC_RECEIVE_SHADOW\n vec2 shadowBias;\n #endif\n};\n#if CC_FORWARD_ADD\n #if CC_PIPELINE_TYPE == 0\n #define LIGHTS_PER_PASS 1\n #else\n #define LIGHTS_PER_PASS 10\n #endif\n #if CC_ENABLE_CLUSTERED_LIGHT_CULLING == 0\n layout(std140) uniform CCForwardLight {\n highp vec4 cc_lightPos[LIGHTS_PER_PASS];\n vec4 cc_lightColor[LIGHTS_PER_PASS];\n vec4 cc_lightSizeRangeAngle[LIGHTS_PER_PASS];\n vec4 cc_lightDir[LIGHTS_PER_PASS];\n };\n #endif\n float SmoothDistAtt (float distSqr, float invSqrAttRadius) {\n float factor = distSqr * invSqrAttRadius;\n float smoothFactor = clamp(1.0 - factor * factor, 0.0, 1.0);\n return smoothFactor * smoothFactor;\n }\n float GetDistAtt (float distSqr, float invSqrAttRadius) {\n float attenuation = 1.0 / max(distSqr, 0.01*0.01);\n attenuation *= SmoothDistAtt(distSqr , invSqrAttRadius);\n return attenuation;\n }\n float GetAngleAtt (vec3 L, vec3 litDir, float litAngleScale, float litAngleOffset) {\n float cd = dot(litDir, L);\n float attenuation = clamp(cd * litAngleScale + litAngleOffset, 0.0, 1.0);\n return (attenuation * attenuation);\n }\n vec4 CCToonShading (ToonSurface s) {\n vec3 position;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n position = unpackHighpData(s.position, s.position_fract_part);\n #else\n position = s.position;\n #endif\n vec3 V = normalize(cc_cameraPos.xyz - position);\n vec3 N = normalize(s.normal);\n float specularWeight = 1.0 - pow(s.specular.a, 5.0);\n vec3 finalColor = vec3(0.0);\n for (int i = 0; i < LIGHTS_PER_PASS; i++) {\n vec3 SLU = cc_lightPos[i].xyz - position;\n vec3 SL = normalize(SLU);\n vec3 SH = normalize(SL + V);\n float SNL = 0.5 * dot(N, SL) + 0.5;\n float SNH = 0.5 * dot(N, SH) + 0.5;\n float distSqr = dot(SLU, SLU);\n float litRadius = cc_lightSizeRangeAngle[i].x;\n float litRadiusSqr = litRadius * litRadius;\n float illum = litRadiusSqr / max(litRadiusSqr , distSqr);\n float attRadiusSqrInv = 1.0 / max(cc_lightSizeRangeAngle[i].y, 0.01);\n attRadiusSqrInv *= attRadiusSqrInv;\n float att = GetDistAtt(distSqr, attRadiusSqrInv);\n vec3 diffuse = mix(s.shade1, s.shade2,\n clamp(1.0 + (s.shadeStep - s.shadeFeather - SNL) / s.shadeFeather, 0.0, 1.0));\n diffuse = mix(s.baseColor.rgb, diffuse,\n clamp(1.0 + (s.baseStep - s.baseFeather - SNL) / s.baseFeather, 0.0, 1.0));\n float specularMask = step(specularWeight, SNH);\n vec3 specular = s.specular.rgb * specularMask;\n if (cc_lightPos[i].w > 0.0) {\n float cosInner = max(dot(-cc_lightDir[i].xyz, SL), 0.01);\n float cosOuter = cc_lightSizeRangeAngle[i].z;\n float litAngleScale = 1.0 / max(0.001, cosInner - cosOuter);\n float litAngleOffset = -cosOuter * litAngleScale;\n att *= GetAngleAtt(SL, -cc_lightDir[i].xyz, litAngleScale, litAngleOffset);\n }\n finalColor += SNL * cc_lightColor[i].rgb * cc_lightColor[i].a * illum * att * s.baseStep * (diffuse + specular);\n }\n return vec4(finalColor, 0.0);\n }\n#else\n #if CC_RECEIVE_SHADOW\n in highp vec4 v_shadowPos;\n layout(std140) uniform CCShadow {\n highp mat4 cc_matLightView;\n highp mat4 cc_matLightViewProj;\n highp vec4 cc_shadowInvProjDepthInfo;\n highp vec4 cc_shadowProjDepthInfo;\n highp vec4 cc_shadowProjInfo;\n mediump vec4 cc_shadowNFLSInfo;\n mediump vec4 cc_shadowWHPBInfo;\n mediump vec4 cc_shadowLPNNInfo;\n lowp vec4 cc_shadowColor;\n mediump vec4 cc_planarNDInfo;\n };\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n layout(std140) uniform CCCSM {\n highp vec4 cc_csmViewDir0[4];\n highp vec4 cc_csmViewDir1[4];\n highp vec4 cc_csmViewDir2[4];\n highp vec4 cc_csmAtlas[4];\n highp mat4 cc_matCSMViewProj[4];\n highp vec4 cc_csmProjDepthInfo[4];\n highp vec4 cc_csmProjInfo[4];\n highp vec4 cc_csmSplitsInfo;\n };\n #endif\n #if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n float NativePCFShadowFactorHard (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n #if CC_SHADOWMAP_FORMAT == 1\n return step(shadowNDCPos.z, dot(texture(shadowMap, shadowNDCPos.xy), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n return step(shadowNDCPos.z, texture(shadowMap, shadowNDCPos.xy).x);\n #endif\n }\n float NativePCFShadowFactorSoft (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n vec2 oneTap = 1.0 / shadowMapResolution;\n vec2 shadowNDCPos_offset = shadowNDCPos.xy + oneTap;\n float block0, block1, block2, block3;\n #if CC_SHADOWMAP_FORMAT == 1\n block0 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block1 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block2 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block3 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos_offset.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n block0 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)).x);\n block1 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos.y)).x);\n block2 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset.y)).x);\n block3 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos_offset.y)).x);\n #endif\n float coefX = mod(shadowNDCPos.x, oneTap.x) * shadowMapResolution.x;\n float resultX = mix(block0, block1, coefX);\n float resultY = mix(block2, block3, coefX);\n float coefY = mod(shadowNDCPos.y, oneTap.y) * shadowMapResolution.y;\n return mix(resultX, resultY, coefY);\n }\n float NativePCFShadowFactorSoft3X (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n vec2 oneTap = 1.0 / shadowMapResolution;\n float shadowNDCPos_offset_L = shadowNDCPos.x - oneTap.x;\n float shadowNDCPos_offset_R = shadowNDCPos.x + oneTap.x;\n float shadowNDCPos_offset_U = shadowNDCPos.y - oneTap.y;\n float shadowNDCPos_offset_D = shadowNDCPos.y + oneTap.y;\n float block0, block1, block2, block3, block4, block5, block6, block7, block8;\n #if CC_SHADOWMAP_FORMAT == 1\n block0 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block1 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block2 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block3 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block4 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block5 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block6 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block7 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block8 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n block0 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_U)).x);\n block1 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_U)).x);\n block2 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_U)).x);\n block3 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos.y)).x);\n block4 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)).x);\n block5 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos.y)).x);\n block6 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_D)).x);\n block7 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_D)).x);\n block8 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_D)).x);\n #endif\n float coefX = mod(shadowNDCPos.x, oneTap.x) * shadowMapResolution.x;\n float coefY = mod(shadowNDCPos.y, oneTap.y) * shadowMapResolution.y;\n float shadow = 0.0;\n float resultX = mix(block0, block1, coefX);\n float resultY = mix(block3, block4, coefX);\n shadow += mix(resultX , resultY, coefY);\n resultX = mix(block1, block2, coefX);\n resultY = mix(block4, block5, coefX);\n shadow += mix(resultX , resultY, coefY);\n resultX = mix(block3, block4, coefX);\n resultY = mix(block6, block7, coefX);\n shadow += mix(resultX, resultY, coefY);\n resultX = mix(block4, block5, coefX);\n resultY = mix(block7, block8, coefX);\n shadow += mix(resultX, resultY, coefY);\n return shadow * 0.25;\n }\n bool GetShadowNDCPos(out vec3 shadowNDCPos, vec4 shadowPosWithDepthBias)\n {\n \tshadowNDCPos = shadowPosWithDepthBias.xyz / shadowPosWithDepthBias.w * 0.5 + 0.5;\n \tif (shadowNDCPos.x < 0.0 || shadowNDCPos.x > 1.0 ||\n \t\tshadowNDCPos.y < 0.0 || shadowNDCPos.y > 1.0 ||\n \t\tshadowNDCPos.z < 0.0 || shadowNDCPos.z > 1.0) {\n \t\treturn false;\n \t}\n \tshadowNDCPos.xy = cc_cameraPos.w == 1.0 ? vec2(shadowNDCPos.xy.x, 1.0 - shadowNDCPos.xy.y) : shadowNDCPos.xy;\n \treturn true;\n }\n vec4 ApplyShadowDepthBias_FaceNormal(vec4 shadowPos, vec3 worldNormal, float normalBias, vec3 matViewDir0, vec3 matViewDir1, vec3 matViewDir2, vec2 projScaleXY)\n {\n vec4 newShadowPos = shadowPos;\n if (normalBias > EPSILON_LOWP)\n {\n vec3 viewNormal = vec3(dot(matViewDir0, worldNormal), dot(matViewDir1, worldNormal), dot(matViewDir2, worldNormal));\n if (viewNormal.z < 0.1)\n newShadowPos.xy += viewNormal.xy * projScaleXY * normalBias * clamp(viewNormal.z, 0.001, 0.1);\n }\n return newShadowPos;\n }\n vec4 ApplyShadowDepthBias_FaceNormal(vec4 shadowPos, vec3 worldNormal, float normalBias, mat4 matLightView, vec2 projScaleXY)\n {\n \tvec4 newShadowPos = shadowPos;\n \tif (normalBias > EPSILON_LOWP)\n \t{\n \t\tvec4 viewNormal = matLightView * vec4(worldNormal, 0.0);\n \t\tif (viewNormal.z < 0.1)\n \t\t\tnewShadowPos.xy += viewNormal.xy * projScaleXY * normalBias * clamp(viewNormal.z, 0.001, 0.1);\n \t}\n \treturn newShadowPos;\n }\n vec4 ApplyShadowDepthBias_Orthographic(vec4 shadowPos, float viewspaceDepthBias, float projScaleZ, float projBiasZ)\n {\n \tfloat coeffA = projScaleZ;\n \tfloat coeffB = projBiasZ;\n \tfloat viewSpacePos_z = (shadowPos.z - coeffB) / coeffA;\n \tviewSpacePos_z += viewspaceDepthBias;\n \tvec4 result = shadowPos;\n \tresult.z = viewSpacePos_z * coeffA + coeffB;\n \treturn result;\n }\n float CCGetDirLightShadowFactorHard (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorHard(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCGetDirLightShadowFactorSoft (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorSoft(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCGetDirLightShadowFactorSoft3X (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorSoft3X(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCShadowFactorBase(vec4 shadowPos, vec3 N, vec2 shadowBias)\n {\n float realtimeShadow = 1.0;\n vec4 pos = ApplyShadowDepthBias_FaceNormal(shadowPos, N, shadowBias.y, cc_matLightView, cc_shadowProjInfo.xy);\n pos = ApplyShadowDepthBias_Orthographic(pos, shadowBias.x, cc_shadowProjDepthInfo.x, cc_shadowProjDepthInfo.y);\n float pcf = cc_shadowWHPBInfo.z;\n if (pcf > 1.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft3X(pos);\n }else if (pcf > 0.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft(pos);\n }else {\n realtimeShadow = CCGetDirLightShadowFactorHard(pos);\n }\n return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w);\n }\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n int CCGetCSMLevel(out vec4 csmPos, out vec4 shadowProjDepthInfo, out vec4 shadowProjInfo, out vec3 shadowViewDir0, out vec3 shadowViewDir1, out vec3 shadowViewDir2, vec3 worldPos) {\n int layer = -1;\n highp float layerThreshold = cc_csmViewDir0[0].w;\n for (int i = 0; i < 4; i++) {\n vec4 shadowPos = cc_matCSMViewProj[i] * vec4(worldPos.xyz, 1.0);\n vec3 clipPos = shadowPos.xyz / shadowPos.w * 0.5 + 0.5;\n if (clipPos.x >= (0.0 + layerThreshold) && clipPos.x <= (1.0 - layerThreshold) &&\n clipPos.y >= (0.0 + layerThreshold) && clipPos.y <= (1.0 - layerThreshold) &&\n clipPos.z >= 0.0 && clipPos.z <= 1.0 && layer < 0) {\n csmPos = cc_matCSMViewProj[i] * vec4(worldPos.xyz, 1.0);\n csmPos.xy = csmPos.xy * cc_csmAtlas[i].xy + cc_csmAtlas[i].zw;\n shadowProjDepthInfo = cc_csmProjDepthInfo[i];\n shadowProjInfo = cc_csmProjInfo[i];\n shadowViewDir0 = cc_csmViewDir0[i].xyz;\n shadowViewDir1 = cc_csmViewDir1[i].xyz;\n shadowViewDir2 = cc_csmViewDir2[i].xyz;\n layer = i;\n }\n }\n return layer;\n }\n float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias)\n {\n vec4 csmPos = vec4(1.0);\n vec4 shadowProjDepthInfo, shadowProjInfo;\n vec3 shadowViewDir0, shadowViewDir1, shadowViewDir2;\n int level = CCGetCSMLevel(csmPos, shadowProjDepthInfo, shadowProjInfo, shadowViewDir0, shadowViewDir1, shadowViewDir2, worldPos);\n if (level < 0) { return 1.0; }\n float realtimeShadow = 1.0;\n vec4 pos = ApplyShadowDepthBias_FaceNormal(csmPos, N, shadowBias.y, shadowViewDir0, shadowViewDir1, shadowViewDir2, shadowProjInfo.xy);\n pos = ApplyShadowDepthBias_Orthographic(pos, shadowBias.x, shadowProjDepthInfo.x, shadowProjDepthInfo.y);\n float pcf = cc_shadowWHPBInfo.z;\n if (pcf > 1.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft3X(pos);\n } else if (pcf > 0.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft(pos);\n }else {\n realtimeShadow = CCGetDirLightShadowFactorHard(pos);\n }\n return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w);\n }\n #else\n int CCGetCSMLevel(out vec4 csmPos, out vec4 shadowProjDepthInfo, out vec4 shadowProjInfo, out vec3 shadowViewDir0, out vec3 shadowViewDir1, out vec3 shadowViewDir2, vec3 worldPos) {\n return -1;\n }\n float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias) {\n vec4 shadowPos = cc_matLightViewProj * vec4(worldPos, 1.0);\n return CCShadowFactorBase(shadowPos, N, shadowBias);\n }\n #endif\n #endif\n #if CC_RECEIVE_SHADOW\n #endif\n #endif\n vec4 CCToonShading (ToonSurface s) {\n vec3 position;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n position = unpackHighpData(s.position, s.position_fract_part);\n #else\n position = s.position;\n #endif\n vec3 V = normalize(cc_cameraPos.xyz - position);\n vec3 N = normalize(s.normal);\n vec3 L = normalize(-cc_mainLitDir.xyz);\n float NL = 0.5 * dot(N, L) + 0.5;\n float NH = 0.5 * dot(normalize(V + L), N) + 0.5;\n vec3 lightColor = cc_mainLitColor.rgb * cc_mainLitColor.w * s.baseStep;\n vec3 diffuse = mix(s.shade1, s.shade2,\n clamp(1.0 + (s.shadeStep - s.shadeFeather - NL) / s.shadeFeather, 0.0, 1.0));\n diffuse = mix(s.baseColor.rgb, diffuse,\n clamp(1.0 + (s.baseStep - s.baseFeather - NL) / s.baseFeather, 0.0, 1.0));\n float specularWeight = 1.0 - pow(s.specular.a, 5.0);\n float specularMask = step(specularWeight, NH);\n vec3 specular = s.specular.rgb * specularMask;\n vec3 dirlightContrib = diffuse + specular;\n float shadow = 1.0;\n #if CC_RECEIVE_SHADOW\n if(s.shadowCover < NL && cc_mainLitDir.w > 0.0) {\n if (cc_shadowLPNNInfo.w > 0.0) {\n shadow = CCCSMFactorBase(position, N, s.shadowBias);\n } else {\n shadow = CCShadowFactorBase(v_shadowPos, N, s.shadowBias);\n }\n }\n #endif\n dirlightContrib *= shadow;\n vec3 finalColor = lightColor * dirlightContrib;\n finalColor += s.emissive;\n return vec4(finalColor, s.baseColor.a);\n }\n#endif\nlayout(std140) uniform Constants {\n vec4 tilingOffset;\n vec4 baseColor;\n vec4 colorScaleAndCutoff;\n vec4 shadeColor1;\n vec4 shadeColor2;\n vec4 specular;\n vec4 shadeParams;\n vec4 miscParams;\n vec4 emissive;\n vec4 emissiveScaleAndStrenth;\n};\nvec3 ACESToneMap (vec3 color) {\n color = min(color, vec3(8.0));\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_WORLD_POS CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR CC_SURFACES_DEBUG_VIEW_WORLD_POS + 1\n#define CC_SURFACES_DEBUG_VIEW_FACE_SIDE CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR + 1\n#define CC_SURFACES_DEBUG_VIEW_UV0 CC_SURFACES_DEBUG_VIEW_FACE_SIDE + 1\n#define CC_SURFACES_DEBUG_VIEW_UV1 CC_SURFACES_DEBUG_VIEW_UV0 + 1\n#define CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP CC_SURFACES_DEBUG_VIEW_UV1 + 1\n#define CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP + 1\n#define CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_BASE_COLOR CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR CC_SURFACES_DEBUG_VIEW_BASE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_TRANSPARENCY CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_METALLIC CC_SURFACES_DEBUG_VIEW_TRANSPARENCY + 1\n#define CC_SURFACES_DEBUG_VIEW_ROUGHNESS CC_SURFACES_DEBUG_VIEW_METALLIC + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY CC_SURFACES_DEBUG_VIEW_ROUGHNESS + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_ALL CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE CC_SURFACES_DEBUG_VIEW_DIRECT_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_ALL CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_EMISSIVE CC_SURFACES_DEBUG_VIEW_ENV_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_LIGHT_MAP CC_SURFACES_DEBUG_VIEW_EMISSIVE + 1\n#define CC_SURFACES_DEBUG_VIEW_SHADOW CC_SURFACES_DEBUG_VIEW_LIGHT_MAP + 1\n#define CC_SURFACES_DEBUG_VIEW_AO CC_SURFACES_DEBUG_VIEW_SHADOW + 1\n#define CC_SURFACES_DEBUG_VIEW_FOG CC_SURFACES_DEBUG_VIEW_AO + 1\n#define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#define IS_DEBUG_VIEW_LIGHTING_ENABLE_WITH_ALBEDO (cc_debug_view_mode.y > 0.0)\n#define IS_DEBUG_VIEW_MISC_ENABLE_CSM_LAYER_COLORATION (cc_debug_view_mode.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_DIFFUSE (cc_debug_view_composite_pack_1.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_SPECULAR (cc_debug_view_composite_pack_1.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_DIFFUSE (cc_debug_view_composite_pack_1.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_SPECULAR (cc_debug_view_composite_pack_1.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_EMISSIVE (cc_debug_view_composite_pack_2.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_LIGHT_MAP (cc_debug_view_composite_pack_2.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_SHADOW (cc_debug_view_composite_pack_2.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_AO (cc_debug_view_composite_pack_2.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_NORMAL_MAP (cc_debug_view_composite_pack_3.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_FOG (cc_debug_view_composite_pack_3.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_TONE_MAPPING (cc_debug_view_composite_pack_3.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION (cc_debug_view_composite_pack_3.w > 0.0)\nvec3 SRGBToLinear (vec3 gamma) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return gamma;\n }\n #endif\n#endif\n return gamma * gamma;\n}\nvec3 LinearToSRGB(vec3 linear) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return linear;\n }\n #endif\n#endif\n return sqrt(linear);\n}\nvec4 CCFragOutput (vec4 color) {\n #if CC_USE_HDR\n color.rgb = ACESToneMap(color.rgb);\n #endif\n color.rgb = LinearToSRGB(color.rgb);\n return color;\n}\nin vec3 v_position;\nin vec2 v_uv;\n#if CC_RECEIVE_SHADOW\n in mediump vec2 v_shadowBias;\n#endif\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\nin mediump vec3 v_normal;\n#if USE_NORMAL_MAP\n in mediump vec4 v_tangent;\n uniform sampler2D normalMap;\n#endif\n#if USE_1ST_SHADE_MAP\n uniform sampler2D shadeMap1;\n#endif\n#if USE_2ND_SHADE_MAP\n uniform sampler2D shadeMap2;\n#endif\n#if USE_SPECULAR_MAP\n uniform sampler2D specularMap;\n#endif\n#if USE_EMISSIVE_MAP\n uniform sampler2D emissiveMap;\n#endif\n#if USE_ALPHA_TEST\n#endif\nvoid surf (out ToonSurface s) {\n s.shade2 = shadeColor2.rgb * colorScaleAndCutoff.rgb;\n #if USE_2ND_SHADE_MAP\n s.shade2 *= SRGBToLinear(texture(shadeMap2, v_uv).rgb);\n #endif\n s.shade1 = shadeColor1.rgb * colorScaleAndCutoff.rgb;\n #if USE_1ST_SHADE_MAP\n s.shade1 *= SRGBToLinear(texture(shadeMap1, v_uv).rgb);\n #if SHADE_MAP_1_AS_SHADE_MAP_2\n s.shade2 *= s.shade1.rgb;\n #endif\n #endif\n vec4 baseColor = baseColor;\n #if USE_BASE_COLOR_MAP\n vec4 baseColorMap = texture(baseColorMap, v_uv);\n baseColorMap.rgb = SRGBToLinear(baseColorMap.rgb);\n baseColor *= baseColorMap;\n #if BASE_COLOR_MAP_AS_SHADE_MAP_1\n s.shade1 *= baseColorMap.rgb;\n #endif\n #if BASE_COLOR_MAP_AS_SHADE_MAP_2\n s.shade2 *= baseColorMap.rgb;\n #endif\n #endif\n s.baseColor = baseColor;\n s.baseColor.rgb *= colorScaleAndCutoff.xyz;\n #if USE_ALPHA_TEST\n if (s.baseColor.ALPHA_TEST_CHANNEL < colorScaleAndCutoff.w) discard;\n #endif\n s.normal = v_normal;\n #if CC_RECEIVE_SHADOW\n s.shadowBias = v_shadowBias;\n #endif\n #if USE_NORMAL_MAP\n vec3 nmmp = texture(normalMap, v_uv).xyz - vec3(0.5);\n vec3 bitangent = cross(v_normal, v_tangent.xyz) * v_tangent.w;\n s.normal =\n (nmmp.x * emissiveScaleAndStrenth.w) * normalize(v_tangent.xyz) +\n (nmmp.y * emissiveScaleAndStrenth.w) * normalize(bitangent) +\n nmmp.z * normalize(s.normal);\n #endif\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n packHighpData(s.position, s.position_fract_part, v_position);\n #else\n s.position = v_position;\n #endif\n s.specular = specular;\n #if USE_SPECULAR_MAP\n s.specular.rgb *= SRGBToLinear(texture(specularMap, v_uv).rgb);\n #endif\n s.emissive = emissive.rgb * emissiveScaleAndStrenth.xyz;\n #if USE_EMISSIVE_MAP\n s.emissive *= SRGBToLinear(texture(emissiveMap, v_uv).rgb);\n #endif\n s.baseStep = shadeParams.x;\n s.baseFeather = shadeParams.y;\n s.shadeStep = shadeParams.z;\n s.shadeFeather = shadeParams.w;\n s.shadowCover = miscParams.x;\n}\nvec4 frag () {\n ToonSurface s; surf(s);\n vec4 color = CCToonShading(s);\n return CCFragOutput(color);\n}\nlayout(location = 0) out vec4 cc_FragColor;\nvoid main() { cc_FragColor = frag(); }"},"glsl1":{"vert":"\nprecision highp float;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nhighp float decode32 (highp vec4 rgba) {\n rgba = rgba * 255.0;\n highp float Sign = 1.0 - (step(128.0, (rgba[3]) + 0.5)) * 2.0;\n highp float Exponent = 2.0 * (mod(float(int((rgba[3]) + 0.5)), 128.0)) + (step(128.0, (rgba[2]) + 0.5)) - 127.0;\n highp float Mantissa = (mod(float(int((rgba[2]) + 0.5)), 128.0)) * 65536.0 + rgba[1] * 256.0 + rgba[0] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n}\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nattribute vec3 a_position;\nattribute vec3 a_normal;\nattribute vec2 a_texCoord;\nattribute vec4 a_tangent;\n#if CC_USE_SKINNING\n attribute vec4 a_joints;\n attribute vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n attribute highp vec4 a_jointAnimInfo;\n #endif\n attribute vec4 a_matWorld0;\n attribute vec4 a_matWorld1;\n attribute vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n attribute vec4 a_lightingMapUVParam;\n #endif\n #if CC_RECEIVE_SHADOW\n attribute vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n attribute float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n attribute float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\n#if CC_USE_MORPH\n uniform vec4 cc_displacementWeights[15];\n uniform vec4 cc_displacementTextureInfo;\n #if CC_MORPH_TARGET_HAS_POSITION\n uniform sampler2D cc_PositionDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n uniform sampler2D cc_NormalDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n uniform sampler2D cc_TangentDisplacements;\n #endif\n vec2 getPixelLocation(vec2 textureResolution, int pixelIndex) {\n float pixelIndexF = float(pixelIndex);\n float x = mod(pixelIndexF, textureResolution.x);\n float y = floor(pixelIndexF / textureResolution.x);\n return vec2(x, y);\n }\n vec2 getPixelCoordFromLocation(vec2 location, vec2 textureResolution) {\n return (vec2(location.x, location.y) + .5) / textureResolution;\n }\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n int pixelIndex = elementIndex;\n vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n vec2 uv = getPixelCoordFromLocation(location, cc_displacementTextureInfo.xy);\n return texture2D(tex, uv);\n }\n #else\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n int pixelIndex = elementIndex * 4;\n vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n vec2 x = getPixelCoordFromLocation(location + vec2(0.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 y = getPixelCoordFromLocation(location + vec2(1.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 z = getPixelCoordFromLocation(location + vec2(2.0, 0.0), cc_displacementTextureInfo.xy);\n return vec4(\n decode32(texture2D(tex, x)),\n decode32(texture2D(tex, y)),\n decode32(texture2D(tex, z)),\n 1.0\n );\n }\n #endif\n float getDisplacementWeight(int index) {\n int quot = index / 4;\n int remainder = index - quot * 4;\n if (remainder == 0) {\n return cc_displacementWeights[quot].x;\n } else if (remainder == 1) {\n return cc_displacementWeights[quot].y;\n } else if (remainder == 2) {\n return cc_displacementWeights[quot].z;\n } else {\n return cc_displacementWeights[quot].w;\n }\n }\n vec3 getVec3DisplacementFromTexture(sampler2D tex, int vertexIndex) {\n #if CC_MORPH_PRECOMPUTED\n return fetchVec3ArrayFromTexture(tex, vertexIndex).rgb;\n #else\n vec3 result = vec3(0, 0, 0);\n int nVertices = int(cc_displacementTextureInfo.z);\n for (int iTarget = 0; iTarget < CC_MORPH_TARGET_COUNT; ++iTarget) {\n result += (fetchVec3ArrayFromTexture(tex, nVertices * iTarget + vertexIndex).rgb * getDisplacementWeight(iTarget));\n }\n return result;\n #endif\n }\n #if CC_MORPH_TARGET_HAS_POSITION\n vec3 getPositionDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_PositionDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n vec3 getNormalDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_NormalDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n vec3 getTangentDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_TangentDisplacements, vertexId);\n }\n #endif\n void applyMorph (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n int vertexId = getVertexId();\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n normal.xyz = normal.xyz + getNormalDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n tangent.xyz = tangent.xyz + getTangentDisplacement(vertexId);\n #endif\n }\n void applyMorph (inout vec4 position) {\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(getVertexId());\n #endif\n }\n#endif\n#if CC_USE_SKINNING\n #if CC_USE_BAKED_ANIMATION\n uniform highp vec4 cc_jointTextureInfo;\n uniform highp vec4 cc_jointAnimInfo;\n uniform highp sampler2D cc_jointTexture;\n void CCGetJointTextureCoords(float pixelsPerJoint, float jointIdx, out highp float x, out highp float y, out highp float invSize)\n {\n #if USE_INSTANCING\n highp float temp = pixelsPerJoint * (a_jointAnimInfo.x * a_jointAnimInfo.y + jointIdx) + a_jointAnimInfo.z;\n #else\n highp float temp = pixelsPerJoint * (cc_jointAnimInfo.x * cc_jointTextureInfo.y + jointIdx) + cc_jointTextureInfo.z;\n #endif\n invSize = cc_jointTextureInfo.w;\n highp float tempY = floor(temp * invSize);\n x = floor(temp - tempY * cc_jointTextureInfo.x);\n y = (tempY + 0.5) * invSize;\n }\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n uniform highp sampler2D cc_realtimeJoint;\n #else\n uniform highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n #endif\n #endif\n #if CC_USE_BAKED_ANIMATION\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(3.0, i, x, y, invSize);\n vec4 v1 = texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n vec4 v2 = texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n vec4 v3 = texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(12.0, i, x, y, invSize);\n vec4 v1 = vec4(\n decode32(texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n );\n vec4 v2 = vec4(\n decode32(texture2D(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n );\n vec4 v3 = vec4(\n decode32(texture2D(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 11.5) * invSize, y)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n float x = i;\n vec4 v1 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n vec4 v2 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n vec4 v3 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 2.5 / 3.0));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n float x = 4.0 * i;\n vec4 v1 = vec4(\n decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n );\n vec4 v2 = vec4(\n decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n );\n vec4 v3 = vec4(\n decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 2.5 / 3.0)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n mat4 getJointMatrix (float i) {\n int idx = int(i);\n vec4 v1 = cc_joints[idx * 3];\n vec4 v2 = cc_joints[idx * 3 + 1];\n vec4 v3 = cc_joints[idx * 3 + 2];\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #endif\n mat4 skinMatrix () {\n vec4 joints = vec4(a_joints);\n return getJointMatrix(joints.x) * a_weights.x\n + getJointMatrix(joints.y) * a_weights.y\n + getJointMatrix(joints.z) * a_weights.z\n + getJointMatrix(joints.w) * a_weights.w;\n }\n void CCSkin (inout vec4 position) {\n mat4 m = skinMatrix();\n position = m * position;\n }\n void CCSkin (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n mat4 m = skinMatrix();\n position = m * position;\n normal = (m * vec4(normal, 0.0)).xyz;\n tangent.xyz = (m * vec4(tangent.xyz, 0.0)).xyz;\n }\n#endif\nvoid CCVertInput(inout StandardVertInput In)\n{\n In.position = vec4(a_position, 1.0);\n In.normal = a_normal;\n In.tangent = a_tangent;\n #if CC_USE_MORPH\n applyMorph(In.position, In.normal, In.tangent);\n #endif\n #if CC_USE_SKINNING\n CCSkin(In.position, In.normal, In.tangent);\n #endif\n}\nuniform highp mat4 cc_matView;\n uniform highp mat4 cc_matProj;\n#if !USE_INSTANCING\n #if USE_BATCHING\n uniform highp mat4 cc_matWorlds[10];\n #else\n uniform highp mat4 cc_matWorld;\n uniform highp mat4 cc_matWorldIT;\n uniform highp vec4 cc_localShadowBias;\n #endif\n#endif\nvoid CCGetWorldMatrixFull(out mat4 matWorld, out mat4 matWorldIT)\n{\n #if USE_INSTANCING\n matWorld = mat4(\n vec4(a_matWorld0.xyz, 0.0),\n vec4(a_matWorld1.xyz, 0.0),\n vec4(a_matWorld2.xyz, 0.0),\n vec4(a_matWorld0.w, a_matWorld1.w, a_matWorld2.w, 1.0)\n );\n matWorldIT = matWorld;\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n matWorldIT = matWorld;\n #else\n matWorld = cc_matWorld;\n matWorldIT = cc_matWorldIT;\n #endif\n}\n uniform vec4 tilingOffset;\nvarying highp vec4 v_shadowPos;\nuniform highp mat4 cc_matLightViewProj;\n uniform mediump vec4 cc_shadowWHPBInfo;\n uniform mediump vec4 cc_shadowLPNNInfo;\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n #endif\n#if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n #else\n #endif\n#endif\n#if CC_RECEIVE_SHADOW\nvec2 CCGetShadowBias()\n{\n #if USE_INSTANCING\n return vec2(a_localShadowBias.x + cc_shadowWHPBInfo.w, a_localShadowBias.y + cc_shadowLPNNInfo.z);\n #elif !USE_BATCHING\n return vec2(cc_localShadowBias.x + cc_shadowWHPBInfo.w, cc_localShadowBias.y + cc_shadowLPNNInfo.z);\n #else\n return vec2(cc_shadowWHPBInfo.w, cc_shadowLPNNInfo.z);\n #endif\n}\n#endif\nvarying vec3 v_position;\nvarying vec2 v_uv;\nvarying mediump vec3 v_normal;\n#if CC_RECEIVE_SHADOW\n varying mediump vec2 v_shadowBias;\n#endif\n#if USE_NORMAL_MAP\n varying mediump vec4 v_tangent;\n#endif\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld, matWorldIT;\n CCGetWorldMatrixFull(matWorld, matWorldIT);\n vec4 pos = matWorld * In.position;\n v_position = pos.xyz;\n v_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw;\n #if CC_RECEIVE_SHADOW\n v_shadowBias = CCGetShadowBias();\n #endif\n v_normal = (matWorldIT * vec4(In.normal, 0.0)).xyz;\n #if USE_NORMAL_MAP\n v_tangent.xyz = normalize((matWorld * vec4(In.tangent.xyz, 0.0)).xyz);\n v_tangent.w = In.tangent.w;\n #endif\n v_shadowPos = cc_matLightViewProj * pos;\n return cc_matProj * (cc_matView * matWorld) * In.position;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nuniform mediump vec4 cc_debug_view_mode;\n uniform mediump vec4 cc_debug_view_composite_pack_1;\n uniform mediump vec4 cc_debug_view_composite_pack_2;\n uniform mediump vec4 cc_debug_view_composite_pack_3;\nuniform highp vec4 cc_cameraPos;\n uniform mediump vec4 cc_mainLitDir;\n uniform mediump vec4 cc_mainLitColor;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nhighp float unpackHighpData (float mainPart, float modPart) {\n highp float data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out float mainPart, out float modPart, highp float data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp float unpackHighpData (float mainPart, float modPart, const float modValue) {\n highp float data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out float mainPart, out float modPart, highp float data, const float modValue) {\n highp float divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec2 unpackHighpData (vec2 mainPart, vec2 modPart) {\n highp vec2 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec2 mainPart, out vec2 modPart, highp vec2 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec2 unpackHighpData (vec2 mainPart, vec2 modPart, const float modValue) {\n highp vec2 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec2 mainPart, out vec2 modPart, highp vec2 data, const float modValue) {\n highp vec2 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec3 unpackHighpData (vec3 mainPart, vec3 modPart) {\n highp vec3 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec3 mainPart, out vec3 modPart, highp vec3 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec3 unpackHighpData (vec3 mainPart, vec3 modPart, const float modValue) {\n highp vec3 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec3 mainPart, out vec3 modPart, highp vec3 data, const float modValue) {\n highp vec3 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec4 unpackHighpData (vec4 mainPart, vec4 modPart) {\n highp vec4 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec4 mainPart, out vec4 modPart, highp vec4 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec4 unpackHighpData (vec4 mainPart, vec4 modPart, const float modValue) {\n highp vec4 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec4 mainPart, out vec4 modPart, highp vec4 data, const float modValue) {\n highp vec4 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nstruct ToonSurface {\n vec4 baseColor;\n vec4 specular;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n vec3 position, position_fract_part;\n #else\n vec3 position;\n #endif\n vec3 normal;\n vec3 shade1;\n vec3 shade2;\n vec3 emissive;\n float baseStep;\n float baseFeather;\n float shadeStep;\n float shadeFeather;\n float shadowCover;\n #if CC_RECEIVE_SHADOW\n vec2 shadowBias;\n #endif\n};\n#if CC_FORWARD_ADD\n #if CC_PIPELINE_TYPE == 0\n #define LIGHTS_PER_PASS 1\n #else\n #define LIGHTS_PER_PASS 10\n #endif\n #if CC_ENABLE_CLUSTERED_LIGHT_CULLING == 0\n uniform highp vec4 cc_lightPos[LIGHTS_PER_PASS];\n uniform vec4 cc_lightColor[LIGHTS_PER_PASS];\n uniform vec4 cc_lightSizeRangeAngle[LIGHTS_PER_PASS];\n uniform vec4 cc_lightDir[LIGHTS_PER_PASS];\n #endif\n float SmoothDistAtt (float distSqr, float invSqrAttRadius) {\n float factor = distSqr * invSqrAttRadius;\n float smoothFactor = clamp(1.0 - factor * factor, 0.0, 1.0);\n return smoothFactor * smoothFactor;\n }\n float GetDistAtt (float distSqr, float invSqrAttRadius) {\n float attenuation = 1.0 / max(distSqr, 0.01*0.01);\n attenuation *= SmoothDistAtt(distSqr , invSqrAttRadius);\n return attenuation;\n }\n float GetAngleAtt (vec3 L, vec3 litDir, float litAngleScale, float litAngleOffset) {\n float cd = dot(litDir, L);\n float attenuation = clamp(cd * litAngleScale + litAngleOffset, 0.0, 1.0);\n return (attenuation * attenuation);\n }\n vec4 CCToonShading (ToonSurface s) {\n vec3 position;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n position = unpackHighpData(s.position, s.position_fract_part);\n #else\n position = s.position;\n #endif\n vec3 V = normalize(cc_cameraPos.xyz - position);\n vec3 N = normalize(s.normal);\n float specularWeight = 1.0 - pow(s.specular.a, 5.0);\n vec3 finalColor = vec3(0.0);\n for (int i = 0; i < LIGHTS_PER_PASS; i++) {\n vec3 SLU = cc_lightPos[i].xyz - position;\n vec3 SL = normalize(SLU);\n vec3 SH = normalize(SL + V);\n float SNL = 0.5 * dot(N, SL) + 0.5;\n float SNH = 0.5 * dot(N, SH) + 0.5;\n float distSqr = dot(SLU, SLU);\n float litRadius = cc_lightSizeRangeAngle[i].x;\n float litRadiusSqr = litRadius * litRadius;\n float illum = litRadiusSqr / max(litRadiusSqr , distSqr);\n float attRadiusSqrInv = 1.0 / max(cc_lightSizeRangeAngle[i].y, 0.01);\n attRadiusSqrInv *= attRadiusSqrInv;\n float att = GetDistAtt(distSqr, attRadiusSqrInv);\n vec3 diffuse = mix(s.shade1, s.shade2,\n clamp(1.0 + (s.shadeStep - s.shadeFeather - SNL) / s.shadeFeather, 0.0, 1.0));\n diffuse = mix(s.baseColor.rgb, diffuse,\n clamp(1.0 + (s.baseStep - s.baseFeather - SNL) / s.baseFeather, 0.0, 1.0));\n float specularMask = step(specularWeight, SNH);\n vec3 specular = s.specular.rgb * specularMask;\n if (cc_lightPos[i].w > 0.0) {\n float cosInner = max(dot(-cc_lightDir[i].xyz, SL), 0.01);\n float cosOuter = cc_lightSizeRangeAngle[i].z;\n float litAngleScale = 1.0 / max(0.001, cosInner - cosOuter);\n float litAngleOffset = -cosOuter * litAngleScale;\n att *= GetAngleAtt(SL, -cc_lightDir[i].xyz, litAngleScale, litAngleOffset);\n }\n finalColor += SNL * cc_lightColor[i].rgb * cc_lightColor[i].a * illum * att * s.baseStep * (diffuse + specular);\n }\n return vec4(finalColor, 0.0);\n }\n#else\n #if CC_RECEIVE_SHADOW\n varying highp vec4 v_shadowPos;\n uniform highp mat4 cc_matLightView;\n uniform highp mat4 cc_matLightViewProj;\n uniform highp vec4 cc_shadowProjDepthInfo;\n uniform highp vec4 cc_shadowProjInfo;\n uniform mediump vec4 cc_shadowNFLSInfo;\n uniform mediump vec4 cc_shadowWHPBInfo;\n uniform mediump vec4 cc_shadowLPNNInfo;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n uniform highp vec4 cc_csmViewDir0[4];\n uniform highp vec4 cc_csmViewDir1[4];\n uniform highp vec4 cc_csmViewDir2[4];\n uniform highp vec4 cc_csmAtlas[4];\n uniform highp mat4 cc_matCSMViewProj[4];\n uniform highp vec4 cc_csmProjDepthInfo[4];\n uniform highp vec4 cc_csmProjInfo[4];\n #endif\n #if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n float NativePCFShadowFactorHard (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n #if CC_SHADOWMAP_FORMAT == 1\n return step(shadowNDCPos.z, dot(texture2D(shadowMap, shadowNDCPos.xy), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n return step(shadowNDCPos.z, texture2D(shadowMap, shadowNDCPos.xy).x);\n #endif\n }\n float NativePCFShadowFactorSoft (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n vec2 oneTap = 1.0 / shadowMapResolution;\n vec2 shadowNDCPos_offset = shadowNDCPos.xy + oneTap;\n float block0, block1, block2, block3;\n #if CC_SHADOWMAP_FORMAT == 1\n block0 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block1 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block2 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block3 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos_offset.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n block0 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)).x);\n block1 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos.y)).x);\n block2 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset.y)).x);\n block3 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos_offset.y)).x);\n #endif\n float coefX = mod(shadowNDCPos.x, oneTap.x) * shadowMapResolution.x;\n float resultX = mix(block0, block1, coefX);\n float resultY = mix(block2, block3, coefX);\n float coefY = mod(shadowNDCPos.y, oneTap.y) * shadowMapResolution.y;\n return mix(resultX, resultY, coefY);\n }\n float NativePCFShadowFactorSoft3X (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n vec2 oneTap = 1.0 / shadowMapResolution;\n float shadowNDCPos_offset_L = shadowNDCPos.x - oneTap.x;\n float shadowNDCPos_offset_R = shadowNDCPos.x + oneTap.x;\n float shadowNDCPos_offset_U = shadowNDCPos.y - oneTap.y;\n float shadowNDCPos_offset_D = shadowNDCPos.y + oneTap.y;\n float block0, block1, block2, block3, block4, block5, block6, block7, block8;\n #if CC_SHADOWMAP_FORMAT == 1\n block0 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block1 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block2 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block3 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block4 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block5 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block6 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block7 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block8 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n block0 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_U)).x);\n block1 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_U)).x);\n block2 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_U)).x);\n block3 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos.y)).x);\n block4 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)).x);\n block5 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos.y)).x);\n block6 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_D)).x);\n block7 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_D)).x);\n block8 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_D)).x);\n #endif\n float coefX = mod(shadowNDCPos.x, oneTap.x) * shadowMapResolution.x;\n float coefY = mod(shadowNDCPos.y, oneTap.y) * shadowMapResolution.y;\n float shadow = 0.0;\n float resultX = mix(block0, block1, coefX);\n float resultY = mix(block3, block4, coefX);\n shadow += mix(resultX , resultY, coefY);\n resultX = mix(block1, block2, coefX);\n resultY = mix(block4, block5, coefX);\n shadow += mix(resultX , resultY, coefY);\n resultX = mix(block3, block4, coefX);\n resultY = mix(block6, block7, coefX);\n shadow += mix(resultX, resultY, coefY);\n resultX = mix(block4, block5, coefX);\n resultY = mix(block7, block8, coefX);\n shadow += mix(resultX, resultY, coefY);\n return shadow * 0.25;\n }\n bool GetShadowNDCPos(out vec3 shadowNDCPos, vec4 shadowPosWithDepthBias)\n {\n \tshadowNDCPos = shadowPosWithDepthBias.xyz / shadowPosWithDepthBias.w * 0.5 + 0.5;\n \tif (shadowNDCPos.x < 0.0 || shadowNDCPos.x > 1.0 ||\n \t\tshadowNDCPos.y < 0.0 || shadowNDCPos.y > 1.0 ||\n \t\tshadowNDCPos.z < 0.0 || shadowNDCPos.z > 1.0) {\n \t\treturn false;\n \t}\n \tshadowNDCPos.xy = cc_cameraPos.w == 1.0 ? vec2(shadowNDCPos.xy.x, 1.0 - shadowNDCPos.xy.y) : shadowNDCPos.xy;\n \treturn true;\n }\n vec4 ApplyShadowDepthBias_FaceNormal(vec4 shadowPos, vec3 worldNormal, float normalBias, vec3 matViewDir0, vec3 matViewDir1, vec3 matViewDir2, vec2 projScaleXY)\n {\n vec4 newShadowPos = shadowPos;\n if (normalBias > EPSILON_LOWP)\n {\n vec3 viewNormal = vec3(dot(matViewDir0, worldNormal), dot(matViewDir1, worldNormal), dot(matViewDir2, worldNormal));\n if (viewNormal.z < 0.1)\n newShadowPos.xy += viewNormal.xy * projScaleXY * normalBias * clamp(viewNormal.z, 0.001, 0.1);\n }\n return newShadowPos;\n }\n vec4 ApplyShadowDepthBias_FaceNormal(vec4 shadowPos, vec3 worldNormal, float normalBias, mat4 matLightView, vec2 projScaleXY)\n {\n \tvec4 newShadowPos = shadowPos;\n \tif (normalBias > EPSILON_LOWP)\n \t{\n \t\tvec4 viewNormal = matLightView * vec4(worldNormal, 0.0);\n \t\tif (viewNormal.z < 0.1)\n \t\t\tnewShadowPos.xy += viewNormal.xy * projScaleXY * normalBias * clamp(viewNormal.z, 0.001, 0.1);\n \t}\n \treturn newShadowPos;\n }\n vec4 ApplyShadowDepthBias_Orthographic(vec4 shadowPos, float viewspaceDepthBias, float projScaleZ, float projBiasZ)\n {\n \tfloat coeffA = projScaleZ;\n \tfloat coeffB = projBiasZ;\n \tfloat viewSpacePos_z = (shadowPos.z - coeffB) / coeffA;\n \tviewSpacePos_z += viewspaceDepthBias;\n \tvec4 result = shadowPos;\n \tresult.z = viewSpacePos_z * coeffA + coeffB;\n \treturn result;\n }\n float CCGetDirLightShadowFactorHard (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorHard(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCGetDirLightShadowFactorSoft (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorSoft(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCGetDirLightShadowFactorSoft3X (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorSoft3X(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCShadowFactorBase(vec4 shadowPos, vec3 N, vec2 shadowBias)\n {\n float realtimeShadow = 1.0;\n vec4 pos = ApplyShadowDepthBias_FaceNormal(shadowPos, N, shadowBias.y, cc_matLightView, cc_shadowProjInfo.xy);\n pos = ApplyShadowDepthBias_Orthographic(pos, shadowBias.x, cc_shadowProjDepthInfo.x, cc_shadowProjDepthInfo.y);\n float pcf = cc_shadowWHPBInfo.z;\n if (pcf > 1.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft3X(pos);\n }else if (pcf > 0.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft(pos);\n }else {\n realtimeShadow = CCGetDirLightShadowFactorHard(pos);\n }\n return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w);\n }\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n int CCGetCSMLevel(out vec4 csmPos, out vec4 shadowProjDepthInfo, out vec4 shadowProjInfo, out vec3 shadowViewDir0, out vec3 shadowViewDir1, out vec3 shadowViewDir2, vec3 worldPos) {\n int layer = -1;\n highp float layerThreshold = cc_csmViewDir0[0].w;\n for (int i = 0; i < 4; i++) {\n vec4 shadowPos = cc_matCSMViewProj[i] * vec4(worldPos.xyz, 1.0);\n vec3 clipPos = shadowPos.xyz / shadowPos.w * 0.5 + 0.5;\n if (clipPos.x >= (0.0 + layerThreshold) && clipPos.x <= (1.0 - layerThreshold) &&\n clipPos.y >= (0.0 + layerThreshold) && clipPos.y <= (1.0 - layerThreshold) &&\n clipPos.z >= 0.0 && clipPos.z <= 1.0 && layer < 0) {\n csmPos = cc_matCSMViewProj[i] * vec4(worldPos.xyz, 1.0);\n csmPos.xy = csmPos.xy * cc_csmAtlas[i].xy + cc_csmAtlas[i].zw;\n shadowProjDepthInfo = cc_csmProjDepthInfo[i];\n shadowProjInfo = cc_csmProjInfo[i];\n shadowViewDir0 = cc_csmViewDir0[i].xyz;\n shadowViewDir1 = cc_csmViewDir1[i].xyz;\n shadowViewDir2 = cc_csmViewDir2[i].xyz;\n layer = i;\n }\n }\n return layer;\n }\n float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias)\n {\n vec4 csmPos = vec4(1.0);\n vec4 shadowProjDepthInfo, shadowProjInfo;\n vec3 shadowViewDir0, shadowViewDir1, shadowViewDir2;\n int level = CCGetCSMLevel(csmPos, shadowProjDepthInfo, shadowProjInfo, shadowViewDir0, shadowViewDir1, shadowViewDir2, worldPos);\n if (level < 0) { return 1.0; }\n float realtimeShadow = 1.0;\n vec4 pos = ApplyShadowDepthBias_FaceNormal(csmPos, N, shadowBias.y, shadowViewDir0, shadowViewDir1, shadowViewDir2, shadowProjInfo.xy);\n pos = ApplyShadowDepthBias_Orthographic(pos, shadowBias.x, shadowProjDepthInfo.x, shadowProjDepthInfo.y);\n float pcf = cc_shadowWHPBInfo.z;\n if (pcf > 1.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft3X(pos);\n } else if (pcf > 0.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft(pos);\n }else {\n realtimeShadow = CCGetDirLightShadowFactorHard(pos);\n }\n return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w);\n }\n #else\n int CCGetCSMLevel(out vec4 csmPos, out vec4 shadowProjDepthInfo, out vec4 shadowProjInfo, out vec3 shadowViewDir0, out vec3 shadowViewDir1, out vec3 shadowViewDir2, vec3 worldPos) {\n return -1;\n }\n float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias) {\n vec4 shadowPos = cc_matLightViewProj * vec4(worldPos, 1.0);\n return CCShadowFactorBase(shadowPos, N, shadowBias);\n }\n #endif\n #endif\n #if CC_RECEIVE_SHADOW\n #endif\n #endif\n vec4 CCToonShading (ToonSurface s) {\n vec3 position;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n position = unpackHighpData(s.position, s.position_fract_part);\n #else\n position = s.position;\n #endif\n vec3 V = normalize(cc_cameraPos.xyz - position);\n vec3 N = normalize(s.normal);\n vec3 L = normalize(-cc_mainLitDir.xyz);\n float NL = 0.5 * dot(N, L) + 0.5;\n float NH = 0.5 * dot(normalize(V + L), N) + 0.5;\n vec3 lightColor = cc_mainLitColor.rgb * cc_mainLitColor.w * s.baseStep;\n vec3 diffuse = mix(s.shade1, s.shade2,\n clamp(1.0 + (s.shadeStep - s.shadeFeather - NL) / s.shadeFeather, 0.0, 1.0));\n diffuse = mix(s.baseColor.rgb, diffuse,\n clamp(1.0 + (s.baseStep - s.baseFeather - NL) / s.baseFeather, 0.0, 1.0));\n float specularWeight = 1.0 - pow(s.specular.a, 5.0);\n float specularMask = step(specularWeight, NH);\n vec3 specular = s.specular.rgb * specularMask;\n vec3 dirlightContrib = diffuse + specular;\n float shadow = 1.0;\n #if CC_RECEIVE_SHADOW\n if(s.shadowCover < NL && cc_mainLitDir.w > 0.0) {\n if (cc_shadowLPNNInfo.w > 0.0) {\n shadow = CCCSMFactorBase(position, N, s.shadowBias);\n } else {\n shadow = CCShadowFactorBase(v_shadowPos, N, s.shadowBias);\n }\n }\n #endif\n dirlightContrib *= shadow;\n vec3 finalColor = lightColor * dirlightContrib;\n finalColor += s.emissive;\n return vec4(finalColor, s.baseColor.a);\n }\n#endif\n uniform vec4 baseColor;\n uniform vec4 colorScaleAndCutoff;\n uniform vec4 shadeColor1;\n uniform vec4 shadeColor2;\n uniform vec4 specular;\n uniform vec4 shadeParams;\n uniform vec4 miscParams;\n uniform vec4 emissive;\n uniform vec4 emissiveScaleAndStrenth;\nvec3 ACESToneMap (vec3 color) {\n color = min(color, vec3(8.0));\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_WORLD_POS CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR CC_SURFACES_DEBUG_VIEW_WORLD_POS + 1\n#define CC_SURFACES_DEBUG_VIEW_FACE_SIDE CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR + 1\n#define CC_SURFACES_DEBUG_VIEW_UV0 CC_SURFACES_DEBUG_VIEW_FACE_SIDE + 1\n#define CC_SURFACES_DEBUG_VIEW_UV1 CC_SURFACES_DEBUG_VIEW_UV0 + 1\n#define CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP CC_SURFACES_DEBUG_VIEW_UV1 + 1\n#define CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP + 1\n#define CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_BASE_COLOR CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR CC_SURFACES_DEBUG_VIEW_BASE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_TRANSPARENCY CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_METALLIC CC_SURFACES_DEBUG_VIEW_TRANSPARENCY + 1\n#define CC_SURFACES_DEBUG_VIEW_ROUGHNESS CC_SURFACES_DEBUG_VIEW_METALLIC + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY CC_SURFACES_DEBUG_VIEW_ROUGHNESS + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_ALL CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE CC_SURFACES_DEBUG_VIEW_DIRECT_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_ALL CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_EMISSIVE CC_SURFACES_DEBUG_VIEW_ENV_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_LIGHT_MAP CC_SURFACES_DEBUG_VIEW_EMISSIVE + 1\n#define CC_SURFACES_DEBUG_VIEW_SHADOW CC_SURFACES_DEBUG_VIEW_LIGHT_MAP + 1\n#define CC_SURFACES_DEBUG_VIEW_AO CC_SURFACES_DEBUG_VIEW_SHADOW + 1\n#define CC_SURFACES_DEBUG_VIEW_FOG CC_SURFACES_DEBUG_VIEW_AO + 1\n#define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#define IS_DEBUG_VIEW_LIGHTING_ENABLE_WITH_ALBEDO (cc_debug_view_mode.y > 0.0)\n#define IS_DEBUG_VIEW_MISC_ENABLE_CSM_LAYER_COLORATION (cc_debug_view_mode.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_DIFFUSE (cc_debug_view_composite_pack_1.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_SPECULAR (cc_debug_view_composite_pack_1.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_DIFFUSE (cc_debug_view_composite_pack_1.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_SPECULAR (cc_debug_view_composite_pack_1.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_EMISSIVE (cc_debug_view_composite_pack_2.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_LIGHT_MAP (cc_debug_view_composite_pack_2.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_SHADOW (cc_debug_view_composite_pack_2.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_AO (cc_debug_view_composite_pack_2.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_NORMAL_MAP (cc_debug_view_composite_pack_3.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_FOG (cc_debug_view_composite_pack_3.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_TONE_MAPPING (cc_debug_view_composite_pack_3.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION (cc_debug_view_composite_pack_3.w > 0.0)\nvec3 SRGBToLinear (vec3 gamma) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return gamma;\n }\n #endif\n#endif\n return gamma * gamma;\n}\nvec3 LinearToSRGB(vec3 linear) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return linear;\n }\n #endif\n#endif\n return sqrt(linear);\n}\nvec4 CCFragOutput (vec4 color) {\n #if CC_USE_HDR\n color.rgb = ACESToneMap(color.rgb);\n #endif\n color.rgb = LinearToSRGB(color.rgb);\n return color;\n}\nvarying vec3 v_position;\nvarying vec2 v_uv;\n#if CC_RECEIVE_SHADOW\n varying mediump vec2 v_shadowBias;\n#endif\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\nvarying mediump vec3 v_normal;\n#if USE_NORMAL_MAP\n varying mediump vec4 v_tangent;\n uniform sampler2D normalMap;\n#endif\n#if USE_1ST_SHADE_MAP\n uniform sampler2D shadeMap1;\n#endif\n#if USE_2ND_SHADE_MAP\n uniform sampler2D shadeMap2;\n#endif\n#if USE_SPECULAR_MAP\n uniform sampler2D specularMap;\n#endif\n#if USE_EMISSIVE_MAP\n uniform sampler2D emissiveMap;\n#endif\n#if USE_ALPHA_TEST\n#endif\nvoid surf (out ToonSurface s) {\n s.shade2 = shadeColor2.rgb * colorScaleAndCutoff.rgb;\n #if USE_2ND_SHADE_MAP\n s.shade2 *= SRGBToLinear(texture2D(shadeMap2, v_uv).rgb);\n #endif\n s.shade1 = shadeColor1.rgb * colorScaleAndCutoff.rgb;\n #if USE_1ST_SHADE_MAP\n s.shade1 *= SRGBToLinear(texture2D(shadeMap1, v_uv).rgb);\n #if SHADE_MAP_1_AS_SHADE_MAP_2\n s.shade2 *= s.shade1.rgb;\n #endif\n #endif\n vec4 baseColor = baseColor;\n #if USE_BASE_COLOR_MAP\n vec4 baseColorMap = texture2D(baseColorMap, v_uv);\n baseColorMap.rgb = SRGBToLinear(baseColorMap.rgb);\n baseColor *= baseColorMap;\n #if BASE_COLOR_MAP_AS_SHADE_MAP_1\n s.shade1 *= baseColorMap.rgb;\n #endif\n #if BASE_COLOR_MAP_AS_SHADE_MAP_2\n s.shade2 *= baseColorMap.rgb;\n #endif\n #endif\n s.baseColor = baseColor;\n s.baseColor.rgb *= colorScaleAndCutoff.xyz;\n #if USE_ALPHA_TEST\n if (s.baseColor.ALPHA_TEST_CHANNEL < colorScaleAndCutoff.w) discard;\n #endif\n s.normal = v_normal;\n #if CC_RECEIVE_SHADOW\n s.shadowBias = v_shadowBias;\n #endif\n #if USE_NORMAL_MAP\n vec3 nmmp = texture2D(normalMap, v_uv).xyz - vec3(0.5);\n vec3 bitangent = cross(v_normal, v_tangent.xyz) * v_tangent.w;\n s.normal =\n (nmmp.x * emissiveScaleAndStrenth.w) * normalize(v_tangent.xyz) +\n (nmmp.y * emissiveScaleAndStrenth.w) * normalize(bitangent) +\n nmmp.z * normalize(s.normal);\n #endif\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n packHighpData(s.position, s.position_fract_part, v_position);\n #else\n s.position = v_position;\n #endif\n s.specular = specular;\n #if USE_SPECULAR_MAP\n s.specular.rgb *= SRGBToLinear(texture2D(specularMap, v_uv).rgb);\n #endif\n s.emissive = emissive.rgb * emissiveScaleAndStrenth.xyz;\n #if USE_EMISSIVE_MAP\n s.emissive *= SRGBToLinear(texture2D(emissiveMap, v_uv).rgb);\n #endif\n s.baseStep = shadeParams.x;\n s.baseFeather = shadeParams.y;\n s.shadeStep = shadeParams.z;\n s.shadeFeather = shadeParams.w;\n s.shadowCover = miscParams.x;\n}\nvec4 frag () {\n ToonSurface s; surf(s);\n vec4 color = CCToonShading(s);\n return CCFragOutput(color);\n}\nvoid main() { gl_FragColor = frag(); }"},"builtins":{"globals":{"blocks":[{"name":"CCGlobal","defines":[]},{"name":"CCCamera","defines":[]},{"name":"CCShadow","defines":[]},{"name":"CCCSM","defines":["CC_SUPPORT_CASCADED_SHADOW_MAP"]}],"samplerTextures":[{"name":"cc_shadowMap","defines":["CC_RECEIVE_SHADOW"]},{"name":"cc_spotShadowMap","defines":["CC_RECEIVE_SHADOW"]}],"buffers":[],"images":[]},"locals":{"blocks":[{"name":"CCMorph","defines":["CC_USE_MORPH"]},{"name":"CCSkinningTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinningAnimation","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinning","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","!CC_USE_REAL_TIME_JOINT_TEXTURE"]},{"name":"CCLocalBatched","defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"CCLocal","defines":["!USE_INSTANCING","!USE_BATCHING"]},{"name":"CCForwardLight","defines":["CC_FORWARD_ADD","CC_ENABLE_CLUSTERED_LIGHT_CULLING"]}],"samplerTextures":[{"name":"cc_PositionDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_POSITION"]},{"name":"cc_NormalDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_NORMAL"]},{"name":"cc_TangentDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_TANGENT"]},{"name":"cc_jointTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"cc_realtimeJoint","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","CC_USE_REAL_TIME_JOINT_TEXTURE"]}],"buffers":[],"images":[]},"statistics":{"CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS":179,"CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS":111}},"defines":[{"name":"USE_INSTANCING","type":"boolean"},{"name":"USE_BATCHING","type":"boolean"},{"name":"CC_USE_SKINNING","type":"boolean"},{"name":"CC_USE_BAKED_ANIMATION","type":"boolean"},{"name":"CC_USE_LIGHTMAP","type":"boolean"},{"name":"CC_RECEIVE_SHADOW","type":"boolean"},{"name":"CC_USE_MORPH","type":"boolean"},{"name":"CC_MORPH_TARGET_COUNT","type":"number","range":[2,8]},{"name":"CC_MORPH_TARGET_HAS_POSITION","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_NORMAL","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_TANGENT","type":"boolean"},{"name":"CC_MORPH_PRECOMPUTED","type":"boolean"},{"name":"CC_USE_REAL_TIME_JOINT_TEXTURE","type":"boolean"},{"name":"CC_SUPPORT_CASCADED_SHADOW_MAP","type":"boolean"},{"name":"USE_NORMAL_MAP","type":"boolean"},{"name":"CC_FORWARD_ADD","type":"boolean"},{"name":"CC_PIPELINE_TYPE","type":"number","range":[0,1]},{"name":"CC_FORCE_FORWARD_SHADING","type":"boolean"},{"name":"CC_SHADOWMAP_FORMAT","type":"number","range":[0,3]},{"name":"CC_USE_DEBUG_VIEW","type":"number","range":[0,3]},{"name":"CC_USE_HDR","type":"boolean"},{"name":"USE_BASE_COLOR_MAP","type":"boolean"},{"name":"USE_1ST_SHADE_MAP","type":"boolean"},{"name":"USE_2ND_SHADE_MAP","type":"boolean"},{"name":"USE_SPECULAR_MAP","type":"boolean"},{"name":"USE_EMISSIVE_MAP","type":"boolean"},{"name":"USE_ALPHA_TEST","type":"boolean"},{"name":"ALPHA_TEST_CHANNEL","type":"string","options":["a","r","g","b"]},{"name":"SHADE_MAP_1_AS_SHADE_MAP_2","type":"boolean"},{"name":"BASE_COLOR_MAP_AS_SHADE_MAP_1","type":"boolean"},{"name":"BASE_COLOR_MAP_AS_SHADE_MAP_2","type":"boolean"}]},{"hash":593829744,"name":"builtin-toon|shadow-caster-vs:vert|shadow-caster-fs:frag","blocks":[{"name":"Constants","stageFlags":17,"binding":0,"members":[{"name":"tilingOffset","type":16,"count":1},{"name":"baseColor","type":16,"count":1},{"name":"colorScaleAndCutoff","type":16,"count":1},{"name":"shadeColor1","type":16,"count":1},{"name":"shadeColor2","type":16,"count":1},{"name":"specular","type":16,"count":1},{"name":"shadeParams","type":16,"count":1},{"name":"miscParams","type":16,"count":1},{"name":"emissive","type":16,"count":1},{"name":"emissiveScaleAndStrenth","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"baseColorMap","type":28,"count":1,"stageFlags":16,"binding":1,"defines":["USE_BASE_COLOR_MAP"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[],"attributes":[{"name":"a_position","format":32,"location":0,"defines":[]},{"name":"a_normal","format":32,"location":1,"defines":[]},{"name":"a_texCoord","format":21,"location":2,"defines":[]},{"name":"a_tangent","format":44,"location":3,"defines":[]},{"name":"a_joints","location":4,"defines":["CC_USE_SKINNING"]},{"name":"a_weights","format":44,"location":5,"defines":["CC_USE_SKINNING"]},{"name":"a_jointAnimInfo","format":44,"isInstanced":true,"location":6,"defines":["USE_INSTANCING","CC_USE_BAKED_ANIMATION"]},{"name":"a_matWorld0","format":44,"isInstanced":true,"location":7,"defines":["USE_INSTANCING"]},{"name":"a_matWorld1","format":44,"isInstanced":true,"location":8,"defines":["USE_INSTANCING"]},{"name":"a_matWorld2","format":44,"isInstanced":true,"location":9,"defines":["USE_INSTANCING"]},{"name":"a_lightingMapUVParam","format":44,"isInstanced":true,"location":10,"defines":["USE_INSTANCING","CC_USE_LIGHTMAP"]},{"name":"a_localShadowBias","format":21,"isInstanced":true,"location":11,"defines":["USE_INSTANCING","CC_RECEIVE_SHADOW"]},{"name":"a_dyn_batch_id","format":11,"location":12,"defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"a_vertexId","format":11,"location":13,"defines":["CC_USE_MORPH"]}],"fragColors":[{"name":"cc_FragColor","typename":"vec4","type":16,"count":1,"stageFlags":16,"location":0,"defines":[]}],"glsl3":{"vert":"\nprecision highp float;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nhighp float decode32 (highp vec4 rgba) {\n rgba = rgba * 255.0;\n highp float Sign = 1.0 - (step(128.0, (rgba[3]) + 0.5)) * 2.0;\n highp float Exponent = 2.0 * (mod(float(int((rgba[3]) + 0.5)), 128.0)) + (step(128.0, (rgba[2]) + 0.5)) - 127.0;\n highp float Mantissa = (mod(float(int((rgba[2]) + 0.5)), 128.0)) * 65536.0 + rgba[1] * 256.0 + rgba[0] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n}\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nin vec3 a_position;\nin vec3 a_normal;\nin vec2 a_texCoord;\nin vec4 a_tangent;\n#if CC_USE_SKINNING\n in vec4 a_joints;\n in vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n in highp vec4 a_jointAnimInfo;\n #endif\n in vec4 a_matWorld0;\n in vec4 a_matWorld1;\n in vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n in vec4 a_lightingMapUVParam;\n #endif\n #if CC_RECEIVE_SHADOW\n in vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n in float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n in float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\n#if CC_USE_MORPH\n layout(std140) uniform CCMorph {\n vec4 cc_displacementWeights[15];\n vec4 cc_displacementTextureInfo;\n };\n #if CC_MORPH_TARGET_HAS_POSITION\n uniform sampler2D cc_PositionDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n uniform sampler2D cc_NormalDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n uniform sampler2D cc_TangentDisplacements;\n #endif\n vec2 getPixelLocation(vec2 textureResolution, int pixelIndex) {\n float pixelIndexF = float(pixelIndex);\n float x = mod(pixelIndexF, textureResolution.x);\n float y = floor(pixelIndexF / textureResolution.x);\n return vec2(x, y);\n }\n vec2 getPixelCoordFromLocation(vec2 location, vec2 textureResolution) {\n return (vec2(location.x, location.y) + .5) / textureResolution;\n }\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int pixelIndex) {\n ivec2 texSize = textureSize(tex, 0);\n return texelFetch(tex, ivec2(pixelIndex % texSize.x, pixelIndex / texSize.x), 0);\n }\n #else\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n int pixelIndex = elementIndex * 4;\n vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n vec2 x = getPixelCoordFromLocation(location + vec2(0.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 y = getPixelCoordFromLocation(location + vec2(1.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 z = getPixelCoordFromLocation(location + vec2(2.0, 0.0), cc_displacementTextureInfo.xy);\n return vec4(\n decode32(texture(tex, x)),\n decode32(texture(tex, y)),\n decode32(texture(tex, z)),\n 1.0\n );\n }\n #endif\n float getDisplacementWeight(int index) {\n int quot = index / 4;\n int remainder = index - quot * 4;\n if (remainder == 0) {\n return cc_displacementWeights[quot].x;\n } else if (remainder == 1) {\n return cc_displacementWeights[quot].y;\n } else if (remainder == 2) {\n return cc_displacementWeights[quot].z;\n } else {\n return cc_displacementWeights[quot].w;\n }\n }\n vec3 getVec3DisplacementFromTexture(sampler2D tex, int vertexIndex) {\n #if CC_MORPH_PRECOMPUTED\n return fetchVec3ArrayFromTexture(tex, vertexIndex).rgb;\n #else\n vec3 result = vec3(0, 0, 0);\n int nVertices = int(cc_displacementTextureInfo.z);\n for (int iTarget = 0; iTarget < CC_MORPH_TARGET_COUNT; ++iTarget) {\n result += (fetchVec3ArrayFromTexture(tex, nVertices * iTarget + vertexIndex).rgb * getDisplacementWeight(iTarget));\n }\n return result;\n #endif\n }\n #if CC_MORPH_TARGET_HAS_POSITION\n vec3 getPositionDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_PositionDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n vec3 getNormalDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_NormalDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n vec3 getTangentDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_TangentDisplacements, vertexId);\n }\n #endif\n void applyMorph (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n int vertexId = getVertexId();\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n normal.xyz = normal.xyz + getNormalDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n tangent.xyz = tangent.xyz + getTangentDisplacement(vertexId);\n #endif\n }\n void applyMorph (inout vec4 position) {\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(getVertexId());\n #endif\n }\n#endif\n#if CC_USE_SKINNING\n #if CC_USE_BAKED_ANIMATION\n layout(std140) uniform CCSkinningTexture {\n highp vec4 cc_jointTextureInfo;\n };\n layout(std140) uniform CCSkinningAnimation {\n highp vec4 cc_jointAnimInfo;\n };\n uniform highp sampler2D cc_jointTexture;\n void CCGetJointTextureCoords(float pixelsPerJoint, float jointIdx, out highp float x, out highp float y, out highp float invSize)\n {\n #if USE_INSTANCING\n highp float temp = pixelsPerJoint * (a_jointAnimInfo.x * a_jointAnimInfo.y + jointIdx) + a_jointAnimInfo.z;\n #else\n highp float temp = pixelsPerJoint * (cc_jointAnimInfo.x * cc_jointTextureInfo.y + jointIdx) + cc_jointTextureInfo.z;\n #endif\n invSize = cc_jointTextureInfo.w;\n highp float tempY = floor(temp * invSize);\n x = floor(temp - tempY * cc_jointTextureInfo.x);\n y = (tempY + 0.5) * invSize;\n }\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n uniform highp sampler2D cc_realtimeJoint;\n #else\n layout(std140) uniform CCSkinning {\n highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n };\n #endif\n #endif\n #if CC_USE_BAKED_ANIMATION\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(3.0, i, x, y, invSize);\n vec4 v1 = texture(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n vec4 v2 = texture(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n vec4 v3 = texture(cc_jointTexture, vec2((x + 2.5) * invSize, y));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(12.0, i, x, y, invSize);\n vec4 v1 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 11.5) * invSize, y)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n float x = i;\n vec4 v1 = texture(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n vec4 v2 = texture(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n vec4 v3 = texture(cc_realtimeJoint, vec2( x / 256.0, 2.5 / 3.0));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n float x = 4.0 * i;\n vec4 v1 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 2.5 / 3.0)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n mat4 getJointMatrix (float i) {\n int idx = int(i);\n vec4 v1 = cc_joints[idx * 3];\n vec4 v2 = cc_joints[idx * 3 + 1];\n vec4 v3 = cc_joints[idx * 3 + 2];\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #endif\n mat4 skinMatrix () {\n vec4 joints = vec4(a_joints);\n return getJointMatrix(joints.x) * a_weights.x\n + getJointMatrix(joints.y) * a_weights.y\n + getJointMatrix(joints.z) * a_weights.z\n + getJointMatrix(joints.w) * a_weights.w;\n }\n void CCSkin (inout vec4 position) {\n mat4 m = skinMatrix();\n position = m * position;\n }\n void CCSkin (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n mat4 m = skinMatrix();\n position = m * position;\n normal = (m * vec4(normal, 0.0)).xyz;\n tangent.xyz = (m * vec4(tangent.xyz, 0.0)).xyz;\n }\n#endif\nvoid CCVertInput(inout StandardVertInput In)\n{\n In.position = vec4(a_position, 1.0);\n In.normal = a_normal;\n In.tangent = a_tangent;\n #if CC_USE_MORPH\n applyMorph(In.position, In.normal, In.tangent);\n #endif\n #if CC_USE_SKINNING\n CCSkin(In.position, In.normal, In.tangent);\n #endif\n}\n#if !USE_INSTANCING\n #if USE_BATCHING\n layout(std140) uniform CCLocalBatched {\n highp mat4 cc_matWorlds[10];\n };\n #else\n layout(std140) uniform CCLocal {\n highp mat4 cc_matWorld;\n highp mat4 cc_matWorldIT;\n highp vec4 cc_lightingMapUVParam;\n highp vec4 cc_localShadowBias;\n };\n #endif\n#endif\nvoid CCGetWorldMatrixFull(out mat4 matWorld, out mat4 matWorldIT)\n{\n #if USE_INSTANCING\n matWorld = mat4(\n vec4(a_matWorld0.xyz, 0.0),\n vec4(a_matWorld1.xyz, 0.0),\n vec4(a_matWorld2.xyz, 0.0),\n vec4(a_matWorld0.w, a_matWorld1.w, a_matWorld2.w, 1.0)\n );\n matWorldIT = matWorld;\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n matWorldIT = matWorld;\n #else\n matWorld = cc_matWorld;\n matWorldIT = cc_matWorldIT;\n #endif\n}\nlayout(std140) uniform Constants {\n vec4 tilingOffset;\n vec4 baseColor;\n vec4 colorScaleAndCutoff;\n vec4 shadeColor1;\n vec4 shadeColor2;\n vec4 specular;\n vec4 shadeParams;\n vec4 miscParams;\n vec4 emissive;\n vec4 emissiveScaleAndStrenth;\n};\nlayout(std140) uniform CCShadow {\n highp mat4 cc_matLightView;\n highp mat4 cc_matLightViewProj;\n highp vec4 cc_shadowInvProjDepthInfo;\n highp vec4 cc_shadowProjDepthInfo;\n highp vec4 cc_shadowProjInfo;\n mediump vec4 cc_shadowNFLSInfo;\n mediump vec4 cc_shadowWHPBInfo;\n mediump vec4 cc_shadowLPNNInfo;\n lowp vec4 cc_shadowColor;\n mediump vec4 cc_planarNDInfo;\n};\nout vec2 v_uv;\nout vec4 v_worldPos;\nout highp vec2 v_clip_depth;\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld, matWorldIT;\n CCGetWorldMatrixFull(matWorld, matWorldIT);\n v_worldPos = matWorld * In.position;\n vec4 clipPos = cc_matLightViewProj * v_worldPos;\n v_clip_depth = clipPos.zw;\n v_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw;\n return clipPos;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nlayout(std140) uniform Constants {\n vec4 tilingOffset;\n vec4 baseColor;\n vec4 colorScaleAndCutoff;\n vec4 shadeColor1;\n vec4 shadeColor2;\n vec4 specular;\n vec4 shadeParams;\n vec4 miscParams;\n vec4 emissive;\n vec4 emissiveScaleAndStrenth;\n};\nvec4 packDepthToRGBA (float depth) {\n vec4 ret = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth;\n ret = fract(ret);\n ret -= vec4(ret.yzw, 0.0) / 255.0;\n return ret;\n}\nlayout(std140) uniform CCShadow {\n highp mat4 cc_matLightView;\n highp mat4 cc_matLightViewProj;\n highp vec4 cc_shadowInvProjDepthInfo;\n highp vec4 cc_shadowProjDepthInfo;\n highp vec4 cc_shadowProjInfo;\n mediump vec4 cc_shadowNFLSInfo;\n mediump vec4 cc_shadowWHPBInfo;\n mediump vec4 cc_shadowLPNNInfo;\n lowp vec4 cc_shadowColor;\n mediump vec4 cc_planarNDInfo;\n};\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n layout(std140) uniform CCCSM {\n highp vec4 cc_csmViewDir0[4];\n highp vec4 cc_csmViewDir1[4];\n highp vec4 cc_csmViewDir2[4];\n highp vec4 cc_csmAtlas[4];\n highp mat4 cc_matCSMViewProj[4];\n highp vec4 cc_csmProjDepthInfo[4];\n highp vec4 cc_csmProjInfo[4];\n highp vec4 cc_csmSplitsInfo;\n };\n#endif\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nfloat GetLinearDepthFromViewSpace(vec3 viewPos, float near, float far) {\n float dist = length(viewPos);\n return (dist - near) / (far - near);\n}\nfloat CCGetLinearDepth(vec3 worldPos, float viewSpaceBias) {\n\tvec4 viewPos = cc_matLightView * vec4(worldPos.xyz, 1.0);\n viewPos.z += viewSpaceBias;\n\treturn GetLinearDepthFromViewSpace(viewPos.xyz, cc_shadowNFLSInfo.x, cc_shadowNFLSInfo.y);\n}\nfloat CCGetLinearDepth(vec3 worldPos) {\n\treturn CCGetLinearDepth(worldPos, 0.0);\n}\n#if CC_RECEIVE_SHADOW\n layout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n };\n layout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n };\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n #else\n #endif\n#endif\nin vec2 v_uv;\nin vec4 v_worldPos;\nin highp vec2 v_clip_depth;\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\n#if USE_ALPHA_TEST\n#endif\nvec4 frag () {\n vec4 baseColor = baseColor;\n #if USE_ALPHA_TEST\n #if USE_BASE_COLOR_MAP\n baseColor *= texture(baseColorMap, v_uv);\n #endif\n if (baseColor.ALPHA_TEST_CHANNEL < colorScaleAndCutoff.w) discard;\n #endif\n highp float clipDepth = v_clip_depth.x / v_clip_depth.y * 0.5 + 0.5;\n if(cc_shadowLPNNInfo.x > 0.000001 && cc_shadowLPNNInfo.x < 1.999999) {\n #if CC_SHADOWMAP_USE_LINEAR_DEPTH\n clipDepth = CCGetLinearDepth(v_worldPos.xyz);\n #endif\n }\n #if CC_SHADOWMAP_FORMAT == 1\n return packDepthToRGBA(clipDepth);\n #else\n return vec4(clipDepth, 1.0, 1.0, 1.0);\n #endif\n}\nlayout(location = 0) out vec4 cc_FragColor;\nvoid main() { cc_FragColor = frag(); }"},"glsl1":{"vert":"\nprecision highp float;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nhighp float decode32 (highp vec4 rgba) {\n rgba = rgba * 255.0;\n highp float Sign = 1.0 - (step(128.0, (rgba[3]) + 0.5)) * 2.0;\n highp float Exponent = 2.0 * (mod(float(int((rgba[3]) + 0.5)), 128.0)) + (step(128.0, (rgba[2]) + 0.5)) - 127.0;\n highp float Mantissa = (mod(float(int((rgba[2]) + 0.5)), 128.0)) * 65536.0 + rgba[1] * 256.0 + rgba[0] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n}\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nattribute vec3 a_position;\nattribute vec3 a_normal;\nattribute vec2 a_texCoord;\nattribute vec4 a_tangent;\n#if CC_USE_SKINNING\n attribute vec4 a_joints;\n attribute vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n attribute highp vec4 a_jointAnimInfo;\n #endif\n attribute vec4 a_matWorld0;\n attribute vec4 a_matWorld1;\n attribute vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n attribute vec4 a_lightingMapUVParam;\n #endif\n #if CC_RECEIVE_SHADOW\n attribute vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n attribute float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n attribute float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\n#if CC_USE_MORPH\n uniform vec4 cc_displacementWeights[15];\n uniform vec4 cc_displacementTextureInfo;\n #if CC_MORPH_TARGET_HAS_POSITION\n uniform sampler2D cc_PositionDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n uniform sampler2D cc_NormalDisplacements;\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n uniform sampler2D cc_TangentDisplacements;\n #endif\n vec2 getPixelLocation(vec2 textureResolution, int pixelIndex) {\n float pixelIndexF = float(pixelIndex);\n float x = mod(pixelIndexF, textureResolution.x);\n float y = floor(pixelIndexF / textureResolution.x);\n return vec2(x, y);\n }\n vec2 getPixelCoordFromLocation(vec2 location, vec2 textureResolution) {\n return (vec2(location.x, location.y) + .5) / textureResolution;\n }\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n int pixelIndex = elementIndex;\n vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n vec2 uv = getPixelCoordFromLocation(location, cc_displacementTextureInfo.xy);\n return texture2D(tex, uv);\n }\n #else\n vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n int pixelIndex = elementIndex * 4;\n vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n vec2 x = getPixelCoordFromLocation(location + vec2(0.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 y = getPixelCoordFromLocation(location + vec2(1.0, 0.0), cc_displacementTextureInfo.xy);\n vec2 z = getPixelCoordFromLocation(location + vec2(2.0, 0.0), cc_displacementTextureInfo.xy);\n return vec4(\n decode32(texture2D(tex, x)),\n decode32(texture2D(tex, y)),\n decode32(texture2D(tex, z)),\n 1.0\n );\n }\n #endif\n float getDisplacementWeight(int index) {\n int quot = index / 4;\n int remainder = index - quot * 4;\n if (remainder == 0) {\n return cc_displacementWeights[quot].x;\n } else if (remainder == 1) {\n return cc_displacementWeights[quot].y;\n } else if (remainder == 2) {\n return cc_displacementWeights[quot].z;\n } else {\n return cc_displacementWeights[quot].w;\n }\n }\n vec3 getVec3DisplacementFromTexture(sampler2D tex, int vertexIndex) {\n #if CC_MORPH_PRECOMPUTED\n return fetchVec3ArrayFromTexture(tex, vertexIndex).rgb;\n #else\n vec3 result = vec3(0, 0, 0);\n int nVertices = int(cc_displacementTextureInfo.z);\n for (int iTarget = 0; iTarget < CC_MORPH_TARGET_COUNT; ++iTarget) {\n result += (fetchVec3ArrayFromTexture(tex, nVertices * iTarget + vertexIndex).rgb * getDisplacementWeight(iTarget));\n }\n return result;\n #endif\n }\n #if CC_MORPH_TARGET_HAS_POSITION\n vec3 getPositionDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_PositionDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n vec3 getNormalDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_NormalDisplacements, vertexId);\n }\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n vec3 getTangentDisplacement(int vertexId) {\n return getVec3DisplacementFromTexture(cc_TangentDisplacements, vertexId);\n }\n #endif\n void applyMorph (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n int vertexId = getVertexId();\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_NORMAL\n normal.xyz = normal.xyz + getNormalDisplacement(vertexId);\n #endif\n #if CC_MORPH_TARGET_HAS_TANGENT\n tangent.xyz = tangent.xyz + getTangentDisplacement(vertexId);\n #endif\n }\n void applyMorph (inout vec4 position) {\n #if CC_MORPH_TARGET_HAS_POSITION\n position.xyz = position.xyz + getPositionDisplacement(getVertexId());\n #endif\n }\n#endif\n#if CC_USE_SKINNING\n #if CC_USE_BAKED_ANIMATION\n uniform highp vec4 cc_jointTextureInfo;\n uniform highp vec4 cc_jointAnimInfo;\n uniform highp sampler2D cc_jointTexture;\n void CCGetJointTextureCoords(float pixelsPerJoint, float jointIdx, out highp float x, out highp float y, out highp float invSize)\n {\n #if USE_INSTANCING\n highp float temp = pixelsPerJoint * (a_jointAnimInfo.x * a_jointAnimInfo.y + jointIdx) + a_jointAnimInfo.z;\n #else\n highp float temp = pixelsPerJoint * (cc_jointAnimInfo.x * cc_jointTextureInfo.y + jointIdx) + cc_jointTextureInfo.z;\n #endif\n invSize = cc_jointTextureInfo.w;\n highp float tempY = floor(temp * invSize);\n x = floor(temp - tempY * cc_jointTextureInfo.x);\n y = (tempY + 0.5) * invSize;\n }\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n uniform highp sampler2D cc_realtimeJoint;\n #else\n uniform highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n #endif\n #endif\n #if CC_USE_BAKED_ANIMATION\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(3.0, i, x, y, invSize);\n vec4 v1 = texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n vec4 v2 = texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n vec4 v3 = texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n highp float x, y, invSize;\n CCGetJointTextureCoords(12.0, i, x, y, invSize);\n vec4 v1 = vec4(\n decode32(texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n );\n vec4 v2 = vec4(\n decode32(texture2D(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n );\n vec4 v3 = vec4(\n decode32(texture2D(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n decode32(texture2D(cc_jointTexture, vec2((x + 11.5) * invSize, y)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n #if CC_USE_REAL_TIME_JOINT_TEXTURE\n #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n mat4 getJointMatrix (float i) {\n float x = i;\n vec4 v1 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n vec4 v2 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n vec4 v3 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 2.5 / 3.0));\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #else\n mat4 getJointMatrix (float i) {\n float x = 4.0 * i;\n vec4 v1 = vec4(\n decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n );\n vec4 v2 = vec4(\n decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n );\n vec4 v3 = vec4(\n decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 2.5 / 3.0)))\n );\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #else\n mat4 getJointMatrix (float i) {\n int idx = int(i);\n vec4 v1 = cc_joints[idx * 3];\n vec4 v2 = cc_joints[idx * 3 + 1];\n vec4 v3 = cc_joints[idx * 3 + 2];\n return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n }\n #endif\n #endif\n mat4 skinMatrix () {\n vec4 joints = vec4(a_joints);\n return getJointMatrix(joints.x) * a_weights.x\n + getJointMatrix(joints.y) * a_weights.y\n + getJointMatrix(joints.z) * a_weights.z\n + getJointMatrix(joints.w) * a_weights.w;\n }\n void CCSkin (inout vec4 position) {\n mat4 m = skinMatrix();\n position = m * position;\n }\n void CCSkin (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n mat4 m = skinMatrix();\n position = m * position;\n normal = (m * vec4(normal, 0.0)).xyz;\n tangent.xyz = (m * vec4(tangent.xyz, 0.0)).xyz;\n }\n#endif\nvoid CCVertInput(inout StandardVertInput In)\n{\n In.position = vec4(a_position, 1.0);\n In.normal = a_normal;\n In.tangent = a_tangent;\n #if CC_USE_MORPH\n applyMorph(In.position, In.normal, In.tangent);\n #endif\n #if CC_USE_SKINNING\n CCSkin(In.position, In.normal, In.tangent);\n #endif\n}\n#if !USE_INSTANCING\n #if USE_BATCHING\n uniform highp mat4 cc_matWorlds[10];\n #else\n uniform highp mat4 cc_matWorld;\n uniform highp mat4 cc_matWorldIT;\n #endif\n#endif\nvoid CCGetWorldMatrixFull(out mat4 matWorld, out mat4 matWorldIT)\n{\n #if USE_INSTANCING\n matWorld = mat4(\n vec4(a_matWorld0.xyz, 0.0),\n vec4(a_matWorld1.xyz, 0.0),\n vec4(a_matWorld2.xyz, 0.0),\n vec4(a_matWorld0.w, a_matWorld1.w, a_matWorld2.w, 1.0)\n );\n matWorldIT = matWorld;\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n matWorldIT = matWorld;\n #else\n matWorld = cc_matWorld;\n matWorldIT = cc_matWorldIT;\n #endif\n}\n uniform vec4 tilingOffset;\nuniform highp mat4 cc_matLightViewProj;\nvarying vec2 v_uv;\nvarying vec4 v_worldPos;\nvarying highp vec2 v_clip_depth;\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld, matWorldIT;\n CCGetWorldMatrixFull(matWorld, matWorldIT);\n v_worldPos = matWorld * In.position;\n vec4 clipPos = cc_matLightViewProj * v_worldPos;\n v_clip_depth = clipPos.zw;\n v_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw;\n return clipPos;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\n uniform vec4 baseColor;\n uniform vec4 colorScaleAndCutoff;\nvec4 packDepthToRGBA (float depth) {\n vec4 ret = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth;\n ret = fract(ret);\n ret -= vec4(ret.yzw, 0.0) / 255.0;\n return ret;\n}\nuniform highp mat4 cc_matLightView;\n uniform mediump vec4 cc_shadowNFLSInfo;\n uniform mediump vec4 cc_shadowLPNNInfo;\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n #endif\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183f\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\nfloat GetLinearDepthFromViewSpace(vec3 viewPos, float near, float far) {\n float dist = length(viewPos);\n return (dist - near) / (far - near);\n}\nfloat CCGetLinearDepth(vec3 worldPos, float viewSpaceBias) {\n\tvec4 viewPos = cc_matLightView * vec4(worldPos.xyz, 1.0);\n viewPos.z += viewSpaceBias;\n\treturn GetLinearDepthFromViewSpace(viewPos.xyz, cc_shadowNFLSInfo.x, cc_shadowNFLSInfo.y);\n}\nfloat CCGetLinearDepth(vec3 worldPos) {\n\treturn CCGetLinearDepth(worldPos, 0.0);\n}\n#if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n #else\n #endif\n#endif\nvarying vec2 v_uv;\nvarying vec4 v_worldPos;\nvarying highp vec2 v_clip_depth;\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\n#if USE_ALPHA_TEST\n#endif\nvec4 frag () {\n vec4 baseColor = baseColor;\n #if USE_ALPHA_TEST\n #if USE_BASE_COLOR_MAP\n baseColor *= texture2D(baseColorMap, v_uv);\n #endif\n if (baseColor.ALPHA_TEST_CHANNEL < colorScaleAndCutoff.w) discard;\n #endif\n highp float clipDepth = v_clip_depth.x / v_clip_depth.y * 0.5 + 0.5;\n if(cc_shadowLPNNInfo.x > 0.000001 && cc_shadowLPNNInfo.x < 1.999999) {\n #if CC_SHADOWMAP_USE_LINEAR_DEPTH\n clipDepth = CCGetLinearDepth(v_worldPos.xyz);\n #endif\n }\n #if CC_SHADOWMAP_FORMAT == 1\n return packDepthToRGBA(clipDepth);\n #else\n return vec4(clipDepth, 1.0, 1.0, 1.0);\n #endif\n}\nvoid main() { gl_FragColor = frag(); }"},"builtins":{"globals":{"blocks":[{"name":"CCShadow","defines":[]},{"name":"CCCSM","defines":["CC_SUPPORT_CASCADED_SHADOW_MAP"]},{"name":"CCGlobal","defines":["CC_RECEIVE_SHADOW"]},{"name":"CCCamera","defines":["CC_RECEIVE_SHADOW"]}],"samplerTextures":[{"name":"cc_shadowMap","defines":["CC_RECEIVE_SHADOW"]},{"name":"cc_spotShadowMap","defines":["CC_RECEIVE_SHADOW"]}],"buffers":[],"images":[]},"locals":{"blocks":[{"name":"CCMorph","defines":["CC_USE_MORPH"]},{"name":"CCSkinningTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinningAnimation","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinning","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","!CC_USE_REAL_TIME_JOINT_TEXTURE"]},{"name":"CCLocalBatched","defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"CCLocal","defines":["!USE_INSTANCING","!USE_BATCHING"]}],"samplerTextures":[{"name":"cc_PositionDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_POSITION"]},{"name":"cc_NormalDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_NORMAL"]},{"name":"cc_TangentDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_TANGENT"]},{"name":"cc_jointTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"cc_realtimeJoint","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","CC_USE_REAL_TIME_JOINT_TEXTURE"]}],"buffers":[],"images":[]},"statistics":{"CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS":94,"CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS":111}},"defines":[{"name":"USE_INSTANCING","type":"boolean"},{"name":"USE_BATCHING","type":"boolean"},{"name":"CC_USE_SKINNING","type":"boolean"},{"name":"CC_USE_BAKED_ANIMATION","type":"boolean"},{"name":"CC_USE_LIGHTMAP","type":"boolean"},{"name":"CC_RECEIVE_SHADOW","type":"boolean"},{"name":"CC_USE_MORPH","type":"boolean"},{"name":"CC_MORPH_TARGET_COUNT","type":"number","range":[2,8]},{"name":"CC_MORPH_TARGET_HAS_POSITION","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_NORMAL","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_TANGENT","type":"boolean"},{"name":"CC_MORPH_PRECOMPUTED","type":"boolean"},{"name":"CC_USE_REAL_TIME_JOINT_TEXTURE","type":"boolean"},{"name":"CC_SUPPORT_CASCADED_SHADOW_MAP","type":"boolean"},{"name":"USE_BASE_COLOR_MAP","type":"boolean"},{"name":"USE_ALPHA_TEST","type":"boolean"},{"name":"ALPHA_TEST_CHANNEL","type":"string","options":["a","r","g","b"]},{"name":"CC_SHADOWMAP_USE_LINEAR_DEPTH","type":"boolean"},{"name":"CC_SHADOWMAP_FORMAT","type":"number","range":[0,3]}]}],[{"passes":[{"program":"builtin-toon|legacy/main-functions/outline-vs:vert|legacy/main-functions/outline-fs:frag","switch":"USE_OUTLINE_PASS","rasterizerState":{"cullMode":1},"depthStencilState":{"depthFunc":3,"depthTest":true,"depthWrite":true},"properties":{"lineWidth":{"type":13,"value":[10],"handleInfo":["outlineParams",0,13]},"depthBias":{"type":13,"value":[0],"handleInfo":["outlineParams",1,13]},"baseColor":{"type":16},"baseColorMap":{"value":"grey","type":28},"outlineParams":{"type":16,"value":[10,0,0,0]}}},{"program":"builtin-toon|toon-vs:vert|toon-fs:frag","properties":{"tilingOffset":{"type":16,"value":[1,1,0,0]},"mainColor":{"linear":true,"type":16,"value":[0.6,0.6,0.6,1],"handleInfo":["baseColor",0,16]},"colorScale":{"type":15,"value":[1,1,1],"handleInfo":["colorScaleAndCutoff",0,15]},"alphaThreshold":{"type":13,"value":[0.5],"handleInfo":["colorScaleAndCutoff",3,13]},"shadeColor1":{"linear":true,"type":16,"value":[0.4,0.4,0.4,1]},"shadeColor2":{"linear":true,"type":16,"value":[0.2,0.2,0.2,1]},"specular":{"linear":true,"type":16,"value":[1,1,1,0.3]},"baseStep":{"type":13,"value":[0.8],"handleInfo":["shadeParams",0,13]},"baseFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",1,13]},"shadeStep":{"type":13,"value":[0.5],"handleInfo":["shadeParams",2,13]},"shadeFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",3,13]},"shadowCover":{"type":13,"value":[0.5],"handleInfo":["miscParams",0,13]},"emissive":{"linear":true,"type":16,"value":[0,0,0,1]},"emissiveScale":{"type":15,"value":[1,1,1],"handleInfo":["emissiveScaleAndStrenth",0,15]},"normalStrength":{"slide":true,"step":0.001,"type":13,"value":[1],"range":[0,5],"handleInfo":["emissiveScaleAndStrenth",3,13]},"normalMap":{"value":"normal","type":28},"mainTexture":{"value":"white","type":28,"handleInfo":["baseColorMap",0,28]},"shadeMap1":{"value":"white","type":28},"shadeMap2":{"value":"white","type":28},"specularMap":{"value":"white","type":28},"emissiveMap":{"value":"grey","type":28},"baseColor":{"type":16,"value":[0.6,0.6,0.6,1]},"colorScaleAndCutoff":{"type":16,"value":[1,1,1,0.5]},"shadeParams":{"type":16,"value":[0.8,0.001,0.5,0.001]},"miscParams":{"type":16,"value":[0.5,0,0,0]},"emissiveScaleAndStrenth":{"type":16,"value":[1,1,1,1]},"baseColorMap":{"type":28,"value":"white"}}},{"phase":"forward-add","propertyIndex":1,"program":"builtin-toon|toon-vs:vert|toon-fs:frag","embeddedMacros":{"CC_FORWARD_ADD":true},"blendState":{"targets":[{"blend":true,"blendSrc":1,"blendDst":1,"blendSrcAlpha":0,"blendDstAlpha":1}]},"depthStencilState":{"depthFunc":2,"depthTest":true,"depthWrite":false},"properties":{"tilingOffset":{"type":16,"value":[1,1,0,0]},"mainColor":{"linear":true,"type":16,"value":[0.6,0.6,0.6,1],"handleInfo":["baseColor",0,16]},"colorScale":{"type":15,"value":[1,1,1],"handleInfo":["colorScaleAndCutoff",0,15]},"alphaThreshold":{"type":13,"value":[0.5],"handleInfo":["colorScaleAndCutoff",3,13]},"shadeColor1":{"linear":true,"type":16,"value":[0.4,0.4,0.4,1]},"shadeColor2":{"linear":true,"type":16,"value":[0.2,0.2,0.2,1]},"specular":{"linear":true,"type":16,"value":[1,1,1,0.3]},"baseStep":{"type":13,"value":[0.8],"handleInfo":["shadeParams",0,13]},"baseFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",1,13]},"shadeStep":{"type":13,"value":[0.5],"handleInfo":["shadeParams",2,13]},"shadeFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",3,13]},"shadowCover":{"type":13,"value":[0.5],"handleInfo":["miscParams",0,13]},"emissive":{"linear":true,"type":16,"value":[0,0,0,1]},"emissiveScale":{"type":15,"value":[1,1,1],"handleInfo":["emissiveScaleAndStrenth",0,15]},"normalStrength":{"slide":true,"step":0.001,"type":13,"value":[1],"range":[0,5],"handleInfo":["emissiveScaleAndStrenth",3,13]},"normalMap":{"value":"normal","type":28},"mainTexture":{"value":"white","type":28,"handleInfo":["baseColorMap",0,28]},"shadeMap1":{"value":"white","type":28},"shadeMap2":{"value":"white","type":28},"specularMap":{"value":"white","type":28},"emissiveMap":{"value":"grey","type":28},"baseColor":{"type":16,"value":[0.6,0.6,0.6,1]},"colorScaleAndCutoff":{"type":16,"value":[1,1,1,0.5]},"shadeParams":{"type":16,"value":[0.8,0.001,0.5,0.001]},"miscParams":{"type":16,"value":[0.5,0,0,0]},"emissiveScaleAndStrenth":{"type":16,"value":[1,1,1,1]},"baseColorMap":{"type":28,"value":"white"}}},{"phase":"shadow-caster","propertyIndex":1,"program":"builtin-toon|shadow-caster-vs:vert|shadow-caster-fs:frag","rasterizerState":{"cullMode":1},"properties":{"tilingOffset":{"type":16,"value":[1,1,0,0]},"mainColor":{"type":16,"value":[0.6,0.6,0.6,1],"handleInfo":["baseColor",0,16]},"colorScale":{"type":15,"value":[1,1,1],"handleInfo":["colorScaleAndCutoff",0,15]},"alphaThreshold":{"type":13,"value":[0.5],"handleInfo":["colorScaleAndCutoff",3,13]},"shadeColor1":{"type":16,"value":[0.4,0.4,0.4,1]},"shadeColor2":{"type":16,"value":[0.2,0.2,0.2,1]},"specular":{"type":16,"value":[1,1,1,0.3]},"baseStep":{"type":13,"value":[0.8],"handleInfo":["shadeParams",0,13]},"baseFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",1,13]},"shadeStep":{"type":13,"value":[0.5],"handleInfo":["shadeParams",2,13]},"shadeFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",3,13]},"emissive":{"type":16,"value":[0,0,0,1]},"emissiveScale":{"type":15,"value":[1,1,1],"handleInfo":["emissiveScaleAndStrenth",0,15]},"normalStrenth":{"type":13,"value":[1],"handleInfo":["emissiveScaleAndStrenth",3,13]},"mainTexture":{"value":"white","type":28,"handleInfo":["baseColorMap",0,28]},"baseColor":{"type":16,"value":[0.6,0.6,0.6,1]},"colorScaleAndCutoff":{"type":16,"value":[1,1,1,0.5]},"shadeParams":{"type":16,"value":[0.8,0.001,0.5,0.001]},"emissiveScaleAndStrenth":{"type":16,"value":[1,1,1,1]},"baseColorMap":{"type":28,"value":"white"}}}]}]]],0,0,[],[],[]],[[[48,"Skin-0",753820634,["RootNode/Bone004/Bone005/Bone006","RootNode/Bone004/Bone005","RootNode/Bone004","RootNode/Bone001/Bone002/Bone003","RootNode/Bone001/Bone002","RootNode/Bone001"],[[[7,0.0004333891556598246,0.10229005664587021,0.21936364471912384,0,-0.0009294628980569541,-0.21936167776584625,0.10229097306728363,0,0.24203883111476898,-0.0010255376109853387,2.406476085070608e-8,0,-0.08006425946950912,0.028319520875811577,-0.005389618221670389,1],[7,0.0006473671528510749,0.10228893905878067,0.21936364471912384,0,-0.001388339907862246,-0.21935929358005524,0.10229097306728363,0,0.24203617870807648,-0.0015318524092435837,2.4064471304541257e-8,0,-0.04029082506895065,0.0284869447350502,-0.005389610305428505,1],[7,-0.0006353461649268866,0.10228794068098068,0.21936413645744324,0,0.0013624817365780473,-0.21935993432998657,0.10228990018367767,0,0.2420363426208496,0.0015033365925773978,1.664581716909197e-8,0,-0.0001784319174475968,0.02797948755323887,-0.0053894720040261745,1],[7,0.0004333891556598246,0.10229005664587021,0.21936364471912384,0,-0.0009294628980569541,-0.21936167776584625,0.10229097306728363,0,0.24203883111476898,-0.0010255376109853387,2.406476085070608e-8,0,-0.08025984466075897,-0.017842883244156837,0.01121316384524107,1],[7,0.0006473671528510749,0.10228893905878067,0.21936364471912384,0,-0.001388339907862246,-0.21935929358005524,0.10229097306728363,0,0.24203617870807648,-0.0015318524092435837,2.4064471304541257e-8,0,-0.040582988411188126,-0.017674952745437622,0.011213171295821667,1],[7,-0.0006353461649268866,0.10228794068098068,0.21936413645744324,0,0.0013624817365780473,-0.21935993432998657,0.10228990018367767,0,0.2420363426208496,0.0015033365925773978,1.664581716909197e-8,0,0.00010828844096977264,-0.01818251982331276,0.011213085614144802,1]],8,8,8,8,8,8]]],0,0,[],[],[]],[[[18,".bin",891374575,[{"primitives":[{"primitiveMode":7,"jointMapIndex":0,"vertexBundelIndices":[0],"indexView":{"offset":8080,"length":462,"count":231,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":8080,"count":101,"stride":80},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false},{"name":"a_texCoord1","format":21,"isNormalized":false}]}],"jointMaps":[[0,1,2,3,4,5]]},"minPosition",8,[1,-0.23816974461078644,-0.3651643395423889,-0.02080436609685421],"maxPosition",8,[1,0.2359408587217331,0.26479941606521606,0.6728445887565613]]],-1],0,0,[],[],[]],[[{"name":"x","rect":{"x":10,"y":7,"width":44,"height":49},"offset":{"x":0,"y":0.5},"originalSize":{"width":64,"height":64},"rotated":false,"capInsets":[0,0,0,0],"vertices":{"rawPosition":[-22,-24.5,0,22,-24.5,0,-22,24.5,0,22,24.5,0],"indexes":[0,1,2,2,1,3],"uv":[10,57,54,57,10,8,54,8],"nuv":[0.15625,0.125,0.84375,0.125,0.15625,0.890625,0.84375,0.890625],"minPos":{"x":-22,"y":-24.5,"z":0},"maxPos":{"x":22,"y":24.5,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[35]],[[{"name":"default_scrollbar_vertical","rect":{"x":0,"y":0,"width":15,"height":30},"offset":{"x":0,"y":0},"originalSize":{"width":15,"height":30},"rotated":false,"capInsets":[4,10,4,10],"vertices":{"rawPosition":[-7.5,-15,0,7.5,-15,0,-7.5,15,0,7.5,15,0],"indexes":[0,1,2,2,1,3],"uv":[0,30,15,30,0,0,15,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-7.5,"y":-15,"z":0},"maxPos":{"x":7.5,"y":15,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[36]],[[[41,"grass",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_TEXTURE":true}],[[[{"alphaThreshold":0},"mainTexture",6,0]],11]]],0,0,[0,0],[15,16],[37,38]],[[{"name":"default_panel","rect":{"x":0,"y":0,"width":20,"height":20},"offset":{"x":0,"y":0},"originalSize":{"width":20,"height":20},"rotated":false,"capInsets":[8,8,8,8],"vertices":{"rawPosition":[-10,-10,0,10,-10,0,-10,10,0,10,10,0],"indexes":[0,1,2,2,1,3],"uv":[0,20,20,20,0,0,20,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-10,"y":-10,"z":0},"maxPos":{"x":10,"y":10,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[39]],[[[49,"islands"],[61,"islands",[-2],[0,"26LvC5hbxAuJZ9Jl2SB/IV",-1,0]],[20,"RootNode",1,[-3,-4,-5,-6,-7,-8,-9,-10,-11,-12],[0,"068WXOAs1HrIDx+RBQ6XoV",1,0]],[17,"plane01",2,[[76,-13,[2,"ddvMFij+ZIL5lu+/NQX8Nf"],[0],[3],1]],[0,"70dgNwYARPfbvgVcNs+gIQ",1,0],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,4.25968408584595,4.25968408584595,2.35247683525085],[1,-90.00000000000003,0,0]],[82,"stone1",2,[[38,1,-14,[2,"e3XMjUJKFLH41z39JaWzyB"],[2],[3],3]],[0,"fd517lz3tOuqVWGd5300X6",1,0],[1,-1.68451106548309,0.804959058761597,-2.55509376525879],[1,0.111417099833488,0.111417099833488,0.111417099833488],[1,0.000009334667642611398,0,0]],[30,"tree1",2,[[76,-15,[2,"a5Viy6l3VLDpf6gY5yZF+v"],[4],[3],5]],[0,"1evO3wfhhGVomhJPkvbiM/",1,0],[1,2.69967889785767,0.392187118530273,-3.67192149162292],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[30,"tree1(__autogen 3)",2,[[38,1,-16,[2,"e4If/bQrJCsb9D9JopZa2h"],[6],[3],7]],[0,"91DpAWXZ9CFJ+Wk1gnOU27",1,0],[1,4.34285020828247,0.273025780916214,-4.5796275138855],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[30,"tree1(__autogen 4)",2,[[38,1,-17,[2,"d7Vkz0NV5Mn4RUce28JVTp"],[8],[3],9]],[0,"03YnQPZo5Nc7TYZfZ1EVIK",1,0],[1,-2.78155946731567,0.366120487451553,-5.44366216659546],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[30,"tree1(__autogen 5)",2,[[38,1,-18,[2,"3eVATgLQJKDbqOvE33W2uc"],[10],[3],11]],[0,"aehmnp6BdEt5duOREy07Ic",1,0],[1,-3.78196001052856,0.328564822673798,-3.62895131111145],[3,-0.7071067811865447,-6.18172403853676e-8,-6.18172403853676e-8,0.7071067811865447],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-89.99999999999999,-0.000010017912624975451,0]],[30,"tree1(__autogen 6)",2,[[38,1,-19,[2,"2akU/MgO5Ovo6QcS0c/I7e"],[12],[3],13]],[0,"1dXVprqA1AkpKbrdcroE4U",1,0],[1,-6.02857780456543,0.0573978498578072,-3.32550001144409],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[30,"tree1(__autogen 7)",2,[[38,1,-20,[2,"54xaKIQbtPLK5r21VY0qmM"],[14],[3],15]],[0,"c2n9MRvPxJRbv1PP2mhkZO",1,0],[1,-0.547172009944916,0.595235526561737,-3.40697646141052],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[30,"tree1(__autogen 8)",2,[[38,1,-21,[2,"23UFBqszxJ/6Otof04QwYT"],[16],[3],17]],[0,"e7VpTFkQ1Ev40vpNxYe7EG",1,0],[1,-6.58904409408569,0.117208734154701,-1.02060234546661],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[30,"tree1(__autogen 9)",2,[[38,1,-22,[2,"c7PE6gNTdDw45ytwlOEWR3"],[18],[3],19]],[0,"a1wQefYUNInYWhsOmPzInv",1,0],[1,5.92053079605103,0.1805190294981,-2.71322011947632],[3,-0.7071067811865447,-6.18172403853676e-8,-6.18172403853676e-8,0.7071067811865447],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-89.99999999999999,-0.000010017912624975451,0]]],0,[0,13,1,0,-1,2,0,-1,3,0,-2,4,0,-3,5,0,-4,6,0,-5,7,0,-6,8,0,-7,9,0,-8,10,0,-9,11,0,-10,12,0,0,3,0,0,4,0,0,5,0,0,6,0,0,7,0,0,8,0,0,9,0,0,10,0,0,11,0,0,12,0,22,1,22],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-1,8,-1,8,-1,8,-1,8,-1,8,-1,8,-1,8,-1,8,-1,8,-1,8],[40,41,42,43,11,44,11,45,11,46,11,47,11,48,11,49,11,50,11,51]],[[[49,"soldier"],[83,"soldier",[-3],[[55,true,-2,[2,"04W3Kzvb9BZbZUGFZzfzi5"],[12],13]],[0,"6dMvPN2t1B66O9Zc3HG8dr",-1,0],[1,0,0.956,1.402]],[20,"RootNode",1,[-4,-5,-6,-7,-8],[0,"a5uiqiY3JH2IVaNOBBe7fQ",1,0]],[84,"Bip001 Spine",[-9,-10,-11],[0,"deedfocu1E0amfQjzHnnD8",1,0],[1,0.0765029862523079,-0.000119566058856435,1.06260117149759e-7],[3,-0.000002080475910607327,-6.936759723456761e-7,0.0003981589901667568,0.9999999207323014],[1,-0.00023837338537102568,-0.00007939450691674313,0.045625660794268635]],[85,"Bip001 Neck",[-12,-13,-14],[0,"de+U9IqPVD+qUUY0y7H/86",1,0],[1,0.15020164847374,-0.0000435724105045665,-1.20852522433879e-10]],[94,"Bip001",2,[[[9,"Bip001 Footsteps",-15,[0,"24sP2WouNOyq9Pp+iqRgiX",1,0],[1,-5.16987871290063e-28,0,-0.734457075595856],[3,-6.921034890422563e-34,6.921044533149828e-34,0.7071063043492202,0.7071072580235535],[1,0,-1.1216009582263186e-31,90]],-16],4,1],[0,"15XJ/3651AFKLyr6XRj3d7",1,0],[1,0,0.738336980342865,-3.74271143591121e-12],[3,-0.5000003576277411,-0.4999996423720031,-0.4999996423720031,0.5000003576277411],[1,-90,-89.99991803772988,0]],[17,"soldier",2,[[96,1,-17,[2,"78XZsd31xPjIsSP2888FcN"],[0],[3],1,1,2]],[0,"824q3ldSpHoYl9xi6zWeg4",1,0],[3,0.9999999999999953,0,0,-9.735359185469814e-8],[1,87.7489852905273,87.7489852905273,87.7489852905273],[1,-179.99998884410013,0,0]],[86,"Bip001 Pelvis",5,[3],[0,"9brOPlFAxPnLhkrpP6KbLQ",1,0],[3,-0.4999999925491744,-0.4999999925491744,-0.4999993070957696,0.5000007078049007],[1,-89.9999197452773,-89.9999197452773,-0.0000017074910412130916]],[25,"Bip001 L Thigh",3,[-18],[0,"4aENadJ59Io4SS6BMn9Aw4",1,0],[1,-0.0765029117465019,0.000180334449396469,0.0665242150425911],[3,-0.015412850192755845,0.9969698713847834,0.002043751751963479,-0.07621904406852757],[1,-0.098918034361683,-171.25793904676914,-1.7789668366715101]],[25,"Bip001 L Calf",8,[-19],[0,"71+6ovA8dDUowhlyNGBIbM",1,0],[1,0.368020862340927,-2.38418573772492e-9,1.90734859017994e-8],[3,-3.77253945323161e-21,-4.658679694134547e-18,-0.0008097870399876981,0.999999672122421],[1,-8.646032309262241e-19,-5.338462443351186e-16,-0.09279476953314847]],[25,"Bip001 L Foot",9,[-20],[0,"71/rP0sWxM1bfHuNwls2lv",1,0],[1,0.29802131652832,-2.38418573772492e-9,0],[3,0.0020737143220202685,-0.07621822672483194,0.016616994877612996,0.9969505289155877],[1,0.3822464844159605,-8.749946017824339,1.8805865416881686]],[6,"Bip001 L Toe0",10,[[87,"Bip001 L Toe0Nub",-21,[0,"b7ARhVJWFJP4yiboWbM1Xs",1,0],[1,0.00997863244265318,-2.98023217215615e-10,3.55271359939116e-17],[3,9.55341250274695e-16,-2.4399608215727e-23,1,1.83758927467374e-15],[1,-1,-1,-1],[1,180,-179.9999999999999,2.1057221983462293e-13]]],[0,"b7IX4wc+BII5SOxaDKm4bu",1,0],[1,0.0765028968453407,0.0984558463096619,1.90734859017994e-8],[3,-1.5454308319985125e-8,-1.5454308319985125e-8,0.7071067811865472,0.7071067811865472],[1,0,-0.0000025044778683729224,90]],[25,"Bip001 R Thigh",3,[-22],[0,"baRkxlpMJMup2UzoK3llZt",1,0],[1,-0.0765029117465019,0.000180703471414745,-0.0665242150425911],[3,-0.0154126518850906,0.9969698755273314,-0.0020409899233692465,0.07621910398987286],[1,0.09860398393799301,171.25792731952373,-1.7789200579558455]],[25,"Bip001 R Calf",12,[-23],[0,"8a4oYAyD9MkZi9aL5G15gW",1,0],[1,0.36802089214325,0,-3.55271359939116e-17],[3,2.226103102352033e-19,7.125063520427799e-18,-0.0008097898921612967,0.9999996721201113],[1,2.6170459347986135e-17,8.164935972515574e-16,-0.09279509636827488]],[25,"Bip001 R Foot",13,[-24],[0,"cdWn1utjJOUaNdTLXxb/CR",1,0],[1,0.29802131652832,0,-3.81469718035987e-8],[3,-0.002073778117879438,0.07621821928385913,0.016617013506159614,0.9969505290412618],[1,-0.38225392566993516,8.749945293799216,1.8805881155171484]],[6,"Bip001 R Toe0",14,[[63,"Bip001 R Toe0Nub",-25,[0,"77BI3YwgNJqKMpf0rJhZ9s",1,0],[1,0.00997863244265318,-2.98023217215615e-10,7.10542719878232e-17]]],[0,"26R5ll6SNGP5ArlFhrFOzH",1,0],[1,0.0765028968453407,0.0984558537602425,1.90734859017994e-8],[3,-1.5454308319985125e-8,-1.5454308319985125e-8,0.7071067811865472,0.7071067811865472],[1,0,-0.0000025044778683729224,90]],[88,"Bip001 Spine1",3,[4],[0,"78+5xpqyNL2aHMIBr4YHvg",1,0],[1,0.150201484560966,-0.000119601711048745,-3.31727090241429e-10]],[25,"Bip001 L Clavicle",4,[-26],[0,"c67UVUfoFCNLAcx8dX7SW1",1,0],[1,0,0.0000435078145528678,0.0232834853231907],[3,0.6087613827170933,-0.0002434881366867595,0.7933532758994495,0.0003150325566206266],[1,179.9558877717535,-104.99999523006848,0.01165464185401893]],[25,"Bip001 L UpperArm",17,[-27],[0,"66qUHYCHZNMoAvIMM8jTZn",1,0],[1,0.272405058145523,4.54747340722069e-15,0],[3,0.004462069723208538,0.4381802273458216,-0.0019434620153348766,0.8988739629404916],[1,0.5572016837940187,51.97620557313351,0.02386521946895269]],[25,"Bip001 L Forearm",18,[-28],[0,"503RTkgyFOwZRj7QxbXFGT",1,0],[1,0.263291478157043,0,0],[3,-2.7197715504795845e-20,-3.0893820368327117e-17,-0.0008803606294924629,0.9999996124825059],[1,-6.233264281423144e-18,-3.5401778996822195e-15,-0.10088191006996569]],[6,"Bip001 L Hand",19,[[9,"sword01",-29,[0,"98Mxm4C+NAIp1/ms1CXDWg",1,0],[1,0.0919111594557762,0.0340489186346531,-0.14926840364933],[3,0.6409670678902519,-0.3070256396863465,-0.5278458569202463,-0.4650540030872693],[1,-112.37885078724646,75.2002383569922,5.587571211625747]]],[0,"7cWlWOkFtKX6ILXuZfhYqO",1,0],[1,0.199572831392288,-5.9604643443123e-10,1.42108543975646e-16],[3,-0.7068252124052271,1.0458620867947887e-8,1.0614867442646885e-8,0.7073882378922519],[1,-89.95437890588059,0.0000017075473071153707,1.3340228971442967e-8]],[25,"Bip001 R Clavicle",4,[-30],[0,"9fRB6KFOpAz6pb5W8NAqZg",1,0],[1,0,0.0000436370064562652,-0.0232834853231907],[3,-0.6087613827171046,0.00024128768333211222,0.793353275899464,0.0003167210153793466],[1,-179.95597003338875,104.99999512047448,0.011961643569376679]],[25,"Bip001 R UpperArm",21,[-31],[0,"a72KzY4dJDrb/Ifgjl7CSF",1,0],[1,0.272405058145523,6.82120985672115e-14,-1.42108543975646e-16],[3,-0.030114175418424236,-0.43755956999841955,0.05059855375302801,0.897259463867486],[1,-0.5631334715243025,-51.96038786477057,6.727854372934277]],[25,"Bip001 R Forearm",22,[-32],[0,"5eAc4VAlRExZ6nABKN5Ihq",1,0],[1,0.263291418552399,0,-7.62939436071974e-8],[3,-8.302567498559346e-18,-5.588016764292516e-17,-0.13176086831298384,0.9912815309393233],[1,-1.8510999406615195e-15,-6.705762043264369e-15,-15.14271605062808]],[6,"Bip001 R Hand",23,[[9,"shield01",-33,[0,"4f4kzbhYBIMIVjz0nZTcvw",1,0],[1,0.124533005058765,-0.00692871073260903,0.0576667860150337],[3,0.5417342069004817,-0.1379658103002438,0.11668003843623054,0.8208990515846776],[1,67.2841187503732,-20.685866498064005,2.411917394086867]]],[0,"19JEI2tAtAo5mcAZ7XSRWH",1,0],[1,0.199572905898094,8.88178399847791e-18,0],[3,0.7068252124052272,-1.9327187937127104e-17,1.9311804031753923e-17,0.707388237892252],[1,89.95437890588059,-3.1308585900006548e-15,-7.956237644289779e-23]],[6,"Bip001 Head",4,[[63,"Bip001 HeadNub",-34,[0,"ebvw49UjBMKoIvQOBhsyUF",1,0],[1,0.475234657526016,-1.45519149031062e-13,2.99510855318999e-20]]],[0,"4ckJuubwNG3KpsMgkuxo12",1,0],[1,0.0547203049063683,-1.38777874976217e-19,2.71050537062924e-22],[3,-7.265599787883251e-14,1.1042733174299354e-9,-0.0003988305609355657,0.9999999204670887],[1,4.214242912539149e-11,1.2654042790710837e-7,-0.04570261697650697]],[17,"shield",2,[[19,-35,[2,"ffoVYmt2NOmIBz5DHpacF8"],[3],[3],1,4,5]],[0,"2fgzyRcBxNmZKzBdJpnT0Q",1,0],[3,0.9999999999999878,0,0,-1.569582366300871e-7],[1,87.7489852905273,87.7489852905273,87.7489852905273],[1,-179.99998201391097,0,0]],[17,"sword",2,[[19,-36,[2,"9aCVBuMeZPv6so1VxT6c40"],[6],[3],1,7,8]],[0,"d0xEUY/HZBVZJ0EMEz3doQ",1,0],[3,0.9999999999999878,0,0,-1.569582366300871e-7],[1,87.7489852905273,87.7489852905273,87.7489852905273],[1,-179.99998201391097,0,0]],[30,"shield01",2,[[19,-37,[2,"ca1srfPsJJgKKJww9GO/JE"],[9],[3],1,10,11]],[0,"464KPea2NOibwROP5moUvA",1,0],[1,-0.00499999988824129,0,0.00499999988824129],[3,0.9999999999999878,0,0,-1.569582366300871e-7],[1,87.7489852905273,87.7489852905273,87.7489852905273],[1,-179.99998201391097,0,0]]],0,[0,13,1,0,0,1,0,-1,2,0,-1,6,0,-2,5,0,-3,26,0,-4,27,0,-5,28,0,-1,8,0,-2,12,0,-3,16,0,-1,17,0,-2,21,0,-3,25,0,2,5,0,-2,7,0,0,6,0,-1,9,0,-1,10,0,-1,11,0,2,11,0,-1,13,0,-1,14,0,-1,15,0,2,15,0,-1,18,0,-1,19,0,-1,20,0,2,20,0,-1,22,0,-1,23,0,-1,24,0,2,24,0,2,25,0,0,26,0,0,27,0,0,28,0,22,1,3,2,7,4,2,16,37],[0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-1,8,10,-1,8,10,-1,8,10,-1,8,10,-1,11],[14,52,53,14,54,55,14,56,57,58,59,60,19,19]],[[[18,".bin",2341262723,[{"primitives":[{"primitiveMode":7,"jointMapIndex":0,"vertexBundelIndices":[0],"indexView":{"offset":70128,"length":6960,"count":3480,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":70128,"count":974,"stride":72},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false}]}],"jointMaps":[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]]},"minPosition",8,[1,-0.006235902663320303,-0.022199034690856934,-0.00308204535394907],"maxPosition",8,[1,0.006235902663320303,0.0000021968080545775592,0.0029080540407449007]]],-1],0,0,[],[],[]],[[[48,"Skin-0",2507836796,["RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 L Thigh","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 R Thigh","RootNode/Bip001/Bip001 Pelvis","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 R Thigh/Bip001 R Calf","RootNode/Bip001","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 L Thigh/Bip001 L Calf","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 R Thigh/Bip001 R Calf/Bip001 R Foot","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 Head/Bip001 HeadNub","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 Head","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 L Thigh/Bip001 L Calf/Bip001 L Foot","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle/Bip001 L UpperArm","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle/Bip001 L UpperArm/Bip001 L Forearm","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle/Bip001 L UpperArm/Bip001 L Forearm/Bip001 L Hand","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/shield01"],[[[7,13.330132484436035,0.5659459233283997,-86.72872161865234,0,86.68508911132812,2.7542707920074463,13.341398239135742,0,2.808293342590332,-87.70392608642578,-0.14067713916301727,0,0.719279408454895,0.022746119648218155,0.1780078411102295,1],[7,-13.330143928527832,-0.5657054781913757,-86.72872924804688,0,86.68508911132812,2.7542707920074463,-13.34140396118164,0,2.8082568645477295,-87.70392608642578,0.14043928682804108,0,0.7192792892456055,0.022746119648218155,-0.17800788581371307,1],[7,0.00012169029650976881,0.0002419860102236271,87.74899291992188,0,-87.74898529052734,-0.00001708502350084018,0.00012169034744147211,0,0.000017085358194890432,-87.74899291992188,0.0002419859665678814,0,-0.738336980342865,6.5663993339959426e-12,0.0000010239258472211077,1],[7,9.57883514729474e-8,-0.00012308494478929788,87.74899291992188,0,-87.74895477294922,0.06985900551080704,1.9377911542051152e-7,0,-0.06985900551080704,-87.74896240234375,-0.00012308482837397605,0,-0.8148396015167236,0.0007684377487748861,2.1313388831600832e-9,1],[7,-13.329378128051758,-0.5835267305374146,-86.72872924804688,0,86.68132781982422,2.870192527770996,-13.341405868530273,0,2.9255402088165283,-87.7000961303711,0.14043459296226501,0,0.3512277603149414,0.023215843364596367,-0.17800790071487427,1],[7,0.00012029569188598543,87.74899291992188,-5.373075573876507e-15,0,-0.000017085358194890432,2.3417063427233487e-11,-87.74898529052734,0,-87.74899291992188,0.00012029569188598543,0.000017085358194890432,0,3.742711869592075e-12,-5.034101432245029e-17,-0.738336980342865,1],[7,13.329362869262695,0.5837728977203369,-86.72872161865234,0,86.68132781982422,2.870190143585205,13.341397285461426,0,2.9255752563476562,-87.7000961303711,-0.14067858457565308,0,0.3512278199195862,0.023215826600790024,0.1780078411102295,1],[7,0.000003835630195681006,0.00012029569188598543,-87.74899291992188,0,87.74898529052734,-0.000017085363651858643,0.0000038356070035661105,0,-0.000017085358194890432,-87.74899291992188,-0.00012029569188598543,0,0.08038292825222015,0.021714111790060997,-0.16770152747631073,1],[7,0.0001178546590381302,-0.00012308491568546742,87.74899291992188,0,-87.74898529052734,-0.000017085523722926155,0.00011785465176217258,0,0.000017085358194890432,-87.74899291992188,-0.00012308494478929788,0,-1.6451982259750366,5.87142210406455e-7,0.0000022096469365351368,1],[7,0.0001178546590381302,-0.00012308491568546742,87.74899291992188,0,-87.74898529052734,-0.000017085523722926155,0.00011785465176217258,0,0.000017085358194890432,-87.74899291992188,-0.00012308494478929788,0,-1.1699634790420532,-5.1139195988980646e-8,0.0000015713648053861107,1],[7,-84.7590103149414,-0.00011930296022910625,22.711111068725586,0,22.711111068725586,0.000016954663806245662,84.7590103149414,0,-0.00011962600547121838,87.74899291992188,0.00001450093350285897,0,0.26615607738494873,4.7347434417588374e-8,1.0832682847976685,1],[7,84.7590103149414,-0.00012128843081882223,22.711111068725586,0,22.711111068725586,0.000016954663806245662,-84.7590103149414,0,0.00011276743316557258,87.74899291992188,0.00004776870264322497,0,0.26615607738494873,4.734742375944734e-8,-1.0832682847976685,1],[7,9.57883514729474e-8,-0.00012308494478929788,87.74899291992188,0,-87.74895477294922,0.06985900551080704,1.9377911542051152e-7,0,-0.06985900551080704,-87.74896240234375,-0.00012308482837397605,0,-0.9650411605834961,0.0008880393579602242,2.4630661954461175e-9,1],[7,9.57883514729474e-8,-0.00012308494478929788,87.74899291992188,0,-87.74895477294922,0.06985900551080704,1.9377911542051152e-7,0,-0.06985900551080704,-87.74896240234375,-0.00012308482837397605,0,-1.1152427196502686,0.0009316118084825575,2.583918634613269e-9,1],[7,0.000003835630195681006,0.00012029569188598543,-87.74899291992188,0,87.74898529052734,-0.000017085363651858643,0.0000038356070035661105,0,-0.000017085358194890432,-87.74899291992188,-0.00012029569188598543,0,0.08038290590047836,0.0217141043394804,0.16770148277282715,1],[7,34.319801330566406,0.7709546685218811,80.75544738769531,0,80.75911712646484,-0.3673746883869171,-34.31785202026367,0,0.0365816168487072,87.74483489990234,-0.853227436542511,0,0.8495007157325745,-0.006890855263918638,-0.672168493270874,1],[7,-34.105628967285156,3.229346752166748,80.7852783203125,0,80.19358825683594,-9.797160148620605,34.247459411621094,0,10.280043601989746,87.1405258178711,0.8565954566001892,0,0.8434666395187378,-0.10610441118478775,0.6714277267456055,1],[7,34.318382263183594,0.8313809037208557,80.75544738769531,0,80.75962829589844,-0.22517983615398407,-34.317848205566406,0,-0.11791250109672546,87.7447509765625,-0.8532273173332214,0,0.5862204432487488,-0.005858692806214094,-0.6721684336662292,1],[7,34.318382263183594,-80.75476837158203,0.8956841230392456,0,80.75962829589844,34.31765365600586,-0.25250619649887085,0,-0.11791250109672546,0.9230960011482239,87.74404907226562,0,0.38664767146110535,0.6721636056900024,-0.0063939220272004604,1],[7,-33.76499557495117,-5.791998386383057,80.7852783203125,0,79.96836853027344,11.491525650024414,34.24745178222656,0,-12.840116500854492,86.80025482177734,0.8565958738327026,0,0.5877475142478943,0.04913555085659027,0.6714276671409607,1],[7,-33.76499557495117,80.7806396484375,5.856326103210449,0,79.96836853027344,34.256595611572266,-11.464248657226562,0,-12.840116500854492,0.9257150888442993,-86.7995376586914,0,0.3881746232509613,0.671466588973999,-0.04860087111592293,1],[7,-26.09381103515625,47.70235824584961,-68.8729248046875,0,72.14217376708984,-23.88349151611328,-43.87446212768555,0,-42.596981048583984,-69.67027282714844,-32.11593246459961,0,0.23747046291828156,0.08072908967733383,-0.6914553046226501,1]],8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]]],0,0,[],[],[]],[[[18,".bin",2184526039,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":648,"length":48,"count":24,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":648,"count":9,"stride":72},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.009095229208469391,-0.00829001609236002,-0.0038153051864355803],"maxPosition",8,[1,-0.002438712865114212,-0.0038237078115344048,0.0021244001109153032]]],-1],0,0,[],[],[]],[[[18,".bin",2718085466,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":2016,"length":264,"count":132,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":2016,"count":28,"stride":72},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false}]}]},"minPosition",8,[1,0.004531483631581068,-0.006827499717473984,-0.009057947434484959],"maxPosition",8,[1,0.00610683299601078,-0.003189224749803543,0.0015691547887399793]]],-1],0,0,[],[],[]],[[[48,"Skin-2",1928083474,["RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle/Bip001 L UpperArm/Bip001 L Forearm/Bip001 L Hand/sword01"],[[[7,-0.000007191588792920811,-0.00005849258377566002,-87.7490005493164,0,24.115726470947266,-84.3700942993164,0.0000542638408660423,0,-84.37010192871094,-24.115724563598633,0.000022989974240772426,0,-0.00041664036689326167,-0.5413689017295837,0.47052377462387085,1]],8]]],0,0,[],[],[]],[[[48,"Skin-3",3487038830,["RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/shield01"],[[[7,-26.09381103515625,47.70235824584961,-68.8729248046875,0,72.14216613769531,-23.883501052856445,-43.87446594238281,0,-42.59699249267578,-69.6702651977539,-32.11592483520508,0,0.24138452112674713,0.08198083937168121,-0.6857008934020996,1]],8]]],0,0,[],[],[]],[[[18,".bin",428950450,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":6480,"length":480,"count":240,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":6480,"count":90,"stride":72},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.009095229208469391,-0.00861329771578312,-0.0038153051864355803],"maxPosition",8,[1,-0.0022758706472814083,-0.0038237078115344048,0.002340445527806878]]],-1],0,0,[],[],[]],[[[48,"Skin-1",1546018204,["RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/shield01"],[[[7,-26.09381103515625,47.70235824584961,-68.8729248046875,0,72.14216613769531,-23.883501052856445,-43.87446594238281,0,-42.59699249267578,-69.6702651977539,-32.11592483520508,0,0.23747046291828156,0.08072908967733383,-0.6914553046226501,1]],8]]],0,0,[],[],[]],[[{"name":"default_radio_button_off","rect":{"x":3,"y":3,"width":26,"height":26},"offset":{"x":0,"y":0},"originalSize":{"width":32,"height":32},"rotated":false,"capInsets":[13,13,13,13],"vertices":{"rawPosition":[-13,-13,0,13,-13,0,-13,13,0,13,13,0],"indexes":[0,1,2,2,1,3],"uv":[3,29,29,29,3,3,29,3],"nuv":[0.09375,0.09375,0.90625,0.09375,0.09375,0.90625,0.90625,0.90625],"minPos":{"x":-13,"y":-13,"z":0},"maxPos":{"x":13,"y":13,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[61]],[[[49,"Item"],[89,"Item",33554432,[-10,-11,-12,-13,-14],[[45,-2,[2,"9e8hEPMOBHZZQS4qWt6EuF"],[5,500,400],[0,0.5,1]],[123,-8,[2,"ba07wVRbtNOYxfe6u3N+f6"],-7,-6,-5,-4,-3],[126,-9,[2,"67/913JQBC47FHx3PHDYk+"]]],[0,"05cqZo8fxFQJfAkL2Aq/5W",-1,0],[1,0,96,0]],[44,"BCTYPE",33554432,1,[[[98,-15,[2,"97/BbSATJDJqAqmzRzZtOP"],[5,0,25.2]],-16],4,1],[0,"eek3vSAAJIDrxLcriz1vuD",1,0],[1,-198,-10.15,0]],[44,"Num",33554432,1,[[[45,-17,[2,"89xxjR88pEc47bMjFkdSAZ"],[5,0,25.2],[0,0,1]],-18],4,1],[0,"660pMwkB1CELAljCVX6s7S",1,0],[1,-126,-10.15,0]],[44,"type",33554432,1,[[[45,-19,[2,"eaQ04MSgtFarzLo0MmG4Pu"],[5,0,25.2],[0,0,1]],-20],4,1],[0,"02PdNYqgNCVZhWK/fpU/1o",1,0],[1,-60,-10.15,0]],[44,"Price",33554432,1,[[[45,-21,[2,"c9b8A+xNpMzJV8JqTJCZ+6"],[5,0,25.2],[0,0,1]],-22],4,1],[0,"0duweJ0CxJG7d55yXKTKpy",1,0],[1,46,-10.15,0]],[44,"time",33554432,1,[[[45,-23,[2,"43kuhVYcRDEKbnN85EKTvb"],[5,0,25.2],[0,0,1]],-24],4,1],[0,"2dwM5DlLpJOpz95sy49e+v",1,0],[1,154,-10.15,0]],[46,"",0,0,16,16,20,2,[2,"bdoKrCqYVLPIsS9zBDe30X"],[4,4278190080]],[46,"",0,0,16,16,20,3,[2,"51vC8Y18xK3JmH29AsetmM"],[4,4278190080]],[46,"",0,0,16,16,20,4,[2,"c4axIww4dBgY7OZXOS1pg/"],[4,4278190080]],[46,"",0,0,16,16,20,5,[2,"a6DEnvMfRPFa//DW3XT3ke"],[4,4278190080]],[46,"",0,0,16,16,20,6,[2,"469yaWGv5CgqoNde1Rp/NJ"],[4,4278190080]]],0,[0,13,1,0,0,1,0,37,11,0,38,10,0,39,9,0,40,8,0,41,7,0,0,1,0,0,1,0,-1,2,0,-2,3,0,-3,4,0,-4,5,0,-5,6,0,0,2,0,-2,7,0,0,3,0,-2,8,0,0,4,0,-2,9,0,0,5,0,-2,10,0,0,6,0,-2,11,0,22,1,24],[],[],[]],[[{"name":"default_scrollbar_vertical_bg","rect":{"x":0,"y":0,"width":15,"height":30},"offset":{"x":0,"y":0},"originalSize":{"width":15,"height":30},"rotated":false,"capInsets":[4,10,4,10],"vertices":{"rawPosition":[-7.5,-15,0,7.5,-15,0,-7.5,15,0,7.5,15,0],"indexes":[0,1,2,2,1,3],"uv":[0,30,15,30,0,0,15,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-7.5,"y":-15,"z":0},"maxPos":{"x":7.5,"y":15,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[62]]]]